c# - Linq 从列表中的多个列表中选择值

标签 c# linq

我有一个列表列表,其中包含这样的 IntPtr 变量

var testList = new List<List<IntPtr>>();

我正在尝试从列表中选择IntPtr 变量,其中列表的大小大于 0 且 IntPtr 不等于 IntPtr.Zero 使用 Linq

我试过以下方法

var pointers = testList.Where(list => list.Count > 0)
                       .SelectMany(pointer => pointer != IntPtr.Zero);

我究竟做错了什么,我该如何修改此语句以使其按预期工作?

最佳答案

目前,您正在将谓词传递给 SelectMany这不是它所期望的;相反,它期望的是 Func<List<IntPtr>, IEnumerable<IntPtr>>其中 List<IntPtr>是输入列表,IEnumerable<IntPtr>是函数调用时返回的值。

SelectMany然后将取每个嵌套的 IEnumerable<IntPtr>并将其折叠成一个 IEnumerable<IntPtr> .

除此之外,您还尝试使用 !=List<IntPtr> 表示的序列 ( pointer) 上的运算符这是行不通的。

相反,您应该首先通过 SelectMany 折叠嵌套序列。 然后通过 Where 应用谓词子句:

var pointers = testList.Where(list => list.Count > 0) // IEnumerable<List<IntPtr>>
                       .SelectMany(list => list) // IEnumerable<IntPtr>
                       .Where(pointer => pointer != IntPtr.Zero); // IEnumerable<IntPtr>

另一方面,您甚至不需要第一个 Where子句,因为它可以简单地是:

var pointers = testList.SelectMany(list => list) // IEnumerable<IntPtr>
                       .Where(pointer => pointer != IntPtr.Zero); // IEnumerable<IntPtr>

关于c# - Linq 从列表中的多个列表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913297/

相关文章:

c# - Android 单声道中的内存高效位图处理

c# - FlowLayoutPanel 添加到列?

.net - SqlMetal 错误地生成了我的存储过程 (LINQ) 的返回类型

linq - Dynamics CRM 2011 - 使用外连接过滤 LINQ 查询

.net - 使用 Linqdatasource 和 groupby 属性

c# - NHibernate Linq - 如何选择 WHERE IN

c# - WPF 中的 Windows 8 选项卡控件样式

c# - Windows 窗体是否有任何开源或免费的图形/报告/图表框架?

c# - 如何在多个 ASP.NET 页面上覆盖相同的函数(渲染函数)

c# - 如何从 LINQ 中的列列表中选择非空值