加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在linq中进行WHERE IN

发布时间:2020-12-15 04:34:14 所属栏目:百科 来源:网络整理
导读:所以我有一个Blog对象,它有一个标签对象列表(List Tag). 我正在尝试创建一个方法,该方法获取标签列表并返回包含传入列表中所有标签的博客列表. 我能够创建一个方法,如果它匹配一个标签,但返回一个博客列表,而不是标签列表. 要做到这一点,我有这个 entities.B
所以我有一个Blog对象,它有一个标签对象列表(List< Tag>).

我正在尝试创建一个方法,该方法获取标签列表并返回包含传入列表中所有标签的博客列表.

我能够创建一个方法,如果它匹配一个标签,但返回一个博客列表,而不是标签列表.

要做到这一点,我有这个

entities.Blogs.Where(b => b.Tags.Any(t => t.Name == tagName))

但我无法弄清楚如何做这样的事情

entities.Blogs.Where(b => b.Tags.Any(t => t.Name == tags[0] AND t.Name == tags[1] AND t.Name == tags[2] etc.......))

有没有办法做到这一点?

谢谢!

我正在使用LINQ to Entities

解决方法

从逻辑上讲,我认为你需要这样的东西:
entities.Blogs.Where(b => tags.All(t => b.Tags.Any(bt => bt.Name == t)))

或者:

HashSet<string> tagNames = new HashSet<string>(tags);
return entities.Blogs
               .Where(b => tagNames.IsSubsetOf(b.Tags.Select(x => x.Name)));

如果这是使用LINQ to Entities,我怀疑这会起作用 – 但是如果你只是使用LINQ to Objects它应该可以工作.即便如此,它也不会非常有效.我怀疑有一种更有效的做事方式,但我无法立即想到它…感觉就像你想要一个加入,但它再次变得棘手.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读