我有一个记录列表,每个主记录中都有一个包含 0 到多个标志的列表。我正在尝试提出一个 Linq 查询,以仅带回与标志列表中的所有标志匹配的记录。
var flags = new List<string>() {"flag1","flag5"};
//The flags list could also be empty in which case it should match records with no flags set.
var tbs = db.MyContents
.Select(a => new {a.Id, FlagList=a.Flags.Select(f=>f.Name).ToList()})
.Where(f=>f.FlagList.Intersect(flags).Any());
上面的代码带回所有具有"flag1 ||flag5"
or的记录"flag1 && flag5"
。但我想要做的是只带回那些同时具有两者的记录"flag1 && flag5"
有什么建议或想法吗?
您可以尝试使用Except
NOTAny
来确保flags
集合中的每个值都匹配。
var tbs = db.MyContents
.Select(a => new { a.Id, FlagList = a.Flags.Select(f => f.Name) })
.Where(f => !flags.Except(f.FlagList).Any());
编辑
我看到你编辑了你的问题,你只需要在 linq 中添加一些逻辑 where
var tbs = c.Select(a => new { a.Id, FlagList = a.Flags.Select(f => f.Name) })
.Where(f => !flags.Except(f.FlagList).Any() && flags.Count() > 0 ||
flags.Count() == 0 && f.FlagList.Count() == 0);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句