如何在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列表。

我得到一个错误,如果我写在上面的方式。

如何在Linq中编写这个WHERE条件

试试这个:

/*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)