c# - 从具有整数属性的 List<T> 返回 List<int>?

标签 c# linq c#-4.0

最终结果是我想用.Where(t => someIntList.Contains(t.ID)).ToList() .我正在努力创建 someIntList .

我目前拥有的:List<Person> people = people.Where(p => p.isActive).ToList() .如何只返回 List<int>p.ID属性(property)?

或者是否有另一种方法来执行 Contains(无需编写 Comparer 类,因为我已经将其用于其他目的。

最佳答案

好吧,生成 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;

或者创建一个 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();

这两者都会给查找所有匹配项带来 O(M + N) 的复杂度,而不是构建列表然后使用 that 作为 Contains 的 O(M * N)检查就可以了。

当然,这是假设 Contains检查将在过程中完成。如果这实际上将在 LINQ to SQL 查询中使用,那么它可能是传入一个 List<int>很好 - 或者 可能 连接允许您在数据库中完成所有操作。我们确实需要更多上下文来为您提供好的建议 - 但不要仅仅停留在“这就是我构建 List<T> 的方式,因此我完成了。”

关于c# - 从具有整数属性的 List<T> 返回 List<int>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12717954/

相关文章:

c# - 无法将类型字符串隐式转换为 byte[]

c# - XML Writer 将结果存储到字符串

c# - 与异步方法相关的 VoidTaskResult 类型是什么?

asp.net - 用于 ASP.NET 的 Linq Orderby 随机 ThreadSafe

c# - 帮助 Linq 查询

c# - 使用 LINQ,获取导航属性的前 x 行的方法是什么?

asp.net - 从 convert.tostring() 转换空值

C# VSTO Excel 插件 : How can I access Ribbons Controls from the Addins ThisAddIn_Startup?

c# - 如何等待任务执行结束来恢复程序的执行

c# - UWP 应用构建失败 "Microsoft.UI.Xaml.Markup could not be found"