gpt4 book ai didi

c# - linq where 包含列表中的所有项目

转载 作者:太空狗 更新时间:2023-10-30 00:18:49 26 4
gpt4 key购买 nike

我有一个过滤器列表,我想用它来查询一个表,其中返回的项目包含所有值,而不仅仅是 1。

例如我有一个标签/标签系统。我想返回其中包含“运动”和“足球”标签的记录。然而,'sport' 和 'football' 存储在一个列表中,并且可以是用户提供的任意数量的其他标签。

我正在使用 Entity Framework 。我有一个 Tags、Teams、TeamTags 表。我当前的查询是这样的:

string _tags = "sport,football";
List<string> tags = _tags.Split(',').ToList();

var teams = (from t in db.Tags where tags.Contains(t.TagName) select t.Teams).FirstOrDefault().Select(i => i.TeamNames).ToList()

但是这将返回所有具有“运动”标签的球队,而不是那些仅被标记为“运动”和“足球”的球队。

如果您想象先输入“运动”标签,您会得到所有运动队的列表。然后,您添加“足球”标签,该标签将被更多地过滤到足球队。所以我上面的代码基本上在 where 中做了一个或。我也希望能够执行 AND。

因此数据库中的示例数据将是:

野马队有运动和足球标签大都会有运动和棒球标签

我想要有运动和足球标签的球队,而不是运动或足球标签。

最佳答案

我建议试一试:

var teams = (from team in db.Teams 
where tags.All(tag => team.Tags.Any(ttag => ttag.TagName == tag))
select team).ToList();

从那里,如果你想要一个名字列表,你可以在上面做一个投影(很难完全理解你的数据结构是如何设置的,但是像这样):

var teamNames = teams.Select(t => t.Name).ToList();

关于c# - linq where 包含列表中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29128012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com