我有一个过滤器列表,我想用它来查询一个表,其中返回的项包含所有值,而不仅仅是1.
例如,我有一个标签/标签系统.我想返回标记为'sport'和'football'的记录.然而,"运动"和"足球"存储在列表中,并且可以是用户提供的任何数量的其他标签.
我正在使用实体框架.我有一个标签,团队,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()
Run Code Online (Sandbox Code Playgroud)
但是这将使所有拥有"运动"标签的球队不再仅仅被标记为"体育"和"足球".
如果您想先输入'sport'标签,您将获得所有体育项目的团队列表.然后你添加'足球'标签,列表将被更多地过滤到足球队.所以我上面的代码基本上在哪里做了OR.我也希望能够做一个AND.
因此,数据库中的示例数据将是:
野马有运动和足球标签大都会有运动和棒球标签
我希望拥有运动和足球标签的球队,而不是运动或橄榄球标签.
JLR*_*she 10
我建议尝试一下:
var teams = (from team in db.Teams
where tags.All(tag => team.Tags.Any(ttag => ttag.TagName == tag))
select team).ToList();
Run Code Online (Sandbox Code Playgroud)
从那里,如果你想要一个名单列表,你可以对它做一个投影(很难完全了解你的数据结构是如何设置的,但是这样的事情):
var teamNames = teams.Select(t => t.Name).ToList();
Run Code Online (Sandbox Code Playgroud)