IQueryable where 从需要一起 OR 的列表中生成的子句



我有一个列表,要从中生成查询。我需要取回与列表中每个条目匹配的项,并且列表使用两个值来与数据库匹配。手动创建的代码应该是这样的模式。。。

from x in Context.Items
where (x.Prop1 == 5 && x.Prop2 == "Foo") ||
(x.Prop1 == 2 && x.Prop2 == "Bar") ||
(x.Prop1 == 9 && x.Prop2 == "Etc")
select x

如果我只想比较一个属性,我只需要使用"list.Contains(x=>x.Prop1("方法,但我需要比较两个值,而不是一个值。有什么想法吗?

有一些简单的方法可以做到这一点,如果你搜索它,会有更好的答案;列表";模型包含道具1和道具2。

  • 第一个解决方案-这将Prop1和Prop2放入它们自己的列表中。

    var getProp1List = list.Select(i => i.Prop1).ToList();
    var getProp2List = list.Select(i => i.Prop2).ToList();
    var results = queryList.Where(i => getProp1List.Contains(i.Prop1) && getProp2List.Contains(i.Prop2)).ToList();
    
  • 第二个解决方案-将多个对象选择到一个列表中。

    var getSearchTerms = list.Select(i => new { i.Prop1, i.Prop2 }).ToList();
    var results = queryList.Where(i => getSearchTerms.Select(x=>x.Prop1).Contains(i.Prop1) && getSearchTerms.Select(x => x.Prop2).Contains(i.Prop2)).ToList();
    
  • 第三个解决方案-最简单-使用从原始列表中选择来获取数据列表。

    var results = queryList.Where(i => list.Select(x=>x.Prop1).Contains(i.Prop1) && 
    list.Select(x => x.Prop2).Contains(i.Prop2)).ToList();
    

如果我已经正确理解了这个问题!!

最新更新