最终结果是我想使用.Where(t => someIntList.Contains(t.ID)).ToList(). 我正在努力创造someIntList.
到目前为止我所拥有的:List<Person> people = people.Where(p => p.isActive).ToList()。我如何只归还List<int>房产的p.ID一部分?
或者有另一种方法来做包含(不写一个比较器类,因为我已经有一个用于另一个目的。
好吧,制作List<int>很容易,Select用于执行投影:
List<int> activeIds = people.Where(p => p.IsActive)
.Select(p => p.ID)
.ToList();
但是,我不会这样做然后使用Contains,而是执行连接:
var activePeople = people.Where(p => p.IsActive);
var query = from person in otherList
join activePeople on person.ID equals activePeople.ID
select person;
或者创建 aHashSet<int>而不是 a List<int>,这样Contains检查效率更高:
var activeIds = new HashSet<int>(people.Where(p => p.IsActive)
.Select(p => p.ID));
var query = otherList.Where(t => activeIds.Contains(t.ID))
.ToList();
这两者都会给查找所有匹配项提供 O(M + N) 复杂性,而不是 O(M * N) 构造一个列表然后使用它进行Contains检查。
当然,这是假设Contains检查将在进程中完成。如果这实际上将用于 LINQ to SQL 查询,那么可能是传入 aList<int>很好 - 或者可能是连接允许您在数据库中完成所有操作。我们确实需要更多的上下文来给你好的建议——但不要仅仅停留在“这就是我可以构建一个List<T>,因此我完成了”。