最终结果是我想要使用.Where(t => someIntList.Contains(t.ID)).ToList().我正在努力创造someIntList.
到目前为止我所拥有的:List<Person> people = people.Where(p => p.isActive).ToList().我该如何归还一List<int>处p.ID房产?
或者是否有另一种方法可以做包含(没有编写Comparer类,因为我已经有一个用于其他目的.
好吧,生成它List<int>很容易,Select用于执行投影:
List<int> activeIds = people.Where(p => p.IsActive)
.Select(p => p.ID)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但是,Contains我会执行连接,而不是那样做然后使用,
var activePeople = people.Where(p => p.IsActive);
var query = from person in otherList
join activePeople on person.ID equals activePeople.ID
select person;
Run Code Online (Sandbox Code Playgroud)
或者创建一个HashSet<int>而不是一个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();
Run Code Online (Sandbox Code Playgroud)
这两个都会给找到所有匹配的O(M + N)复杂度,而不是O(M*N)构造一个列表然后用它来进行Contains检查.
当然,这是假设Contains检查将在进行中完成.如果这实际上将用于LINQ to SQL查询,则可能是传入a List<int>很好 - 或者可能是连接允许您在数据库中完成所有操作.我们真的需要更多的背景来给你很好的建议 - 但不要只是停下来"这就是我可以建立一个List<T>,所以我已经完成了."
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |