如何在Linq中编写这个WHERE条件
本文关键字:WHERE 条件 Linq | 更新日期: 2023-09-27 18:16:13
如何在Linq中编写这个where
条件?
var result = from i in context.ItemsFullDetails where i.iditem in (1,2,3,4)
where
条件包含与iditem
列比较的id列表。
我得到一个错误,如果我写在上面的方式。
试试这个:
/*Hold here the items you want to filter by*/
var filterCriteria = new List(){1,2,3,4};
/*Get results as Ienumerable<int>*/
var result = context.ItemsFullDetails.Where(i => filterCriteria.Contains(i.iditem));
如果您想获得列表/数组的结果,您可以使用result.ToList()
/result.ToArray()
试试这个方法:
//create filter list
int[] productList = new int[] { 1, 2, 3, 4 };
// check your search item exists in the filter list
var myProducts = from p in db.Products
where productList.Contains(p.ProductID)
select p;
参考:LINQ相当于SQL的"IN"关键字
您有几个选择。第一个,正如我看到很多人在这个和类似的帖子中建议的那样,是从LINQ查询中创建一个外部集合,并使用Contains
来反对它:
int[] items = new[] { 1, 2, 3, 4 };
var result = from i in context.ItemsFullDetails where items.Contains(i.iditem)
但是,如果你在这里的例子或多或少是你真正想要做的,并且你确实有一组固定的可能性,我更倾向于写出逻辑:
var result = from i in context.ItemsFullDetails where i.iditem == 1
|| i.iditem == 2
|| i.iditem == 3
|| i.iditem == 4
现在,这几乎是漂亮的。我同意。但是这将是完成您所追求的最有效的方法,而且我不认为它不够不可读——特别是对于天生习惯这种逻辑的有经验的开发人员——来保证缺乏效率。现在,很明显,这种方法只适用于拥有编译时集合集的情况。但既然你在例子中做到了,我假设你在现实生活中也会做到。这就是我要做的。这样就不必冒险遍历整个集合中的每个元素。
或者如果你需要一个动态的条件集:
List<int> items = new List<int>() { 1, 2, 3, 4 };
items.Add(...);;
var result = from i in context.ItemsFullDetails where items.Contains(i.iditem)