首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ多对多关系,如何写一个正确的WHERE子句?

LINQ多对多关系,如何写一个正确的WHERE子句?
EN

Stack Overflow用户
提问于 2012-05-09 03:58:11
回答 3查看 25.8K关注 0票数 12

我对我的表使用多对多关系。

有一个查询:

代码语言:javascript
运行
复制
var query = from post in context.Posts
        from tag in post.Tags where tag.TagId == 10
        select post;

好的,它工作得很好。我得到的帖子有id指定的标签。

我有一个标签ids的集合。我想得到我收藏中的每一个标签的帖子。

我尝试以下方法:

代码语言:javascript
运行
复制
var tagIds = new int[]{1, 3, 7, 23, 56};

var query = from post in context.Posts
        from tag in post.Tags where tagIds.Contains( tag.TagId )
        select post;

它不起作用。该查询返回具有任何一个指定标签的所有帖子。

我想要得到一个像这样的子句,但对于集合中的任何标签计数都是动态的:

代码语言:javascript
运行
复制
post.Tags.Whare(x => x.TagId = 1 && x.TagId = 3 && x.TagId = 7 && ... )
EN

回答 3

Stack Overflow用户

发布于 2012-05-09 04:01:01

这实际上很容易做到:

代码语言:javascript
运行
复制
var tags = context.Posts.Where(post => post.Tags.All(tag => tagIds.Contains(tag)));
票数 4
EN

Stack Overflow用户

发布于 2012-05-09 04:04:52

如果您希望标签集合仅包含您指定的集合,而不包含其他集合,则另一个选项是使两个列表相交:

代码语言:javascript
运行
复制
var query = from post in context.Posts
  let tags = post.Tags.Select(x => x.Id).ToList()
  where tags.Intersect(tagIds).Count() == tags.Length
  select post;
票数 4
EN

Stack Overflow用户

发布于 2012-05-09 04:01:04

Any上试试吧。

代码语言:javascript
运行
复制
var query = from post in context.Posts
    from tag in post.Tags where tagIds.Any(t => t == tag.TagId )
    select post;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10505595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档