繁体   English   中英

lambda表达式存在于列表中

[英]lambda expression for exists within list

如果我想根据特定的id过滤对象列表,我可以这样做:

list.Where(r => r.Id == idToCompare);   

如果,而不是单个idToCompare ,我有一个要比较的ID列表怎么办?

与预定义列表进行比较的语法是什么? 就像是:

int[] listofIds = GetListofIds();

list.Where(r => r.Id "in listofIds");   

如果listOfIds是一个列表,这将有效,但是,List.Contains()是一个线性搜索,所以这不是非常有效。

最好将要查找的ID存储到适合搜索的容器中,例如Set。

List<int> listOfIds = new List(GetListOfIds());
lists.Where(r=>listOfIds.Contains(r.Id));
var query = list.Where(r => listofIds.Any(id => id == r.Id));

另一种方法,如果listOfIds数组很大,则非常有用:

HashSet<int> hash = new HashSet<int>(listofIds);
var query = list.Where(r => hash.Contains(r.Id));

您可以使用Contains()扩展方法:

list.Where(r => listofIds.Contains(r.Id))

我会看一下Join运算符:

from r in list join i in listofIds on r.Id equals i select r

我不确定如何对Contains方法进行优化,但至少它可以让编译器更好地了解你想要做什么。 它也更接近你想要实现的目标。

编辑:完整性的扩展方法语法(现在我已经弄明白了):

var results = listofIds.Join(list, i => i, r => r.Id, (i, r) => r);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM