c# - 在 LINQ 中连接 2 个具有不同长度的列表

标签 c# linq

如何连接两个不同长度的列表。它应该与序列结合在一起。 例如。

{1,2,3,4} with {5,6,7}

我需要得到如下结果。

{{1,5}, {2,6}, {3,7}, {4,null}}

我尝试过这个。

var qry = a.Select((i, index) => new {i, j = b[index]}); 

但是它会抛出错误,因为列表的长度不同。 请帮助我找到解决方案。

最佳答案

这应该有效:

var a = new int?[] { 1, 2, 3, 4 };
var b = new int?[] { 5, 6, 7 };

var result = Enumerable.Range(0, Math.Max(a.Count(), b.Count()))
                       .Select(n => new[] {a.ElementAtOrDefault(n), b.ElementAtOrDefault(n)});

请注意数组声明中的?。为了在结果列表中包含空值,这是必要的。省略 ? 会导致结果为 0,而不是 null

如果您不能或不想将数组声明为 int?,那么您必须在 Select 中进行强制转换,如下所示:

var result = Enumerable.Range(0, Math.Max(a.Count(), b.Count()))
                       .Select(n => new[] { a.Select(i => (int?)i).ElementAtOrDefault(n), b.Select(i => (int?)i).ElementAtOrDefault(n) });

第二段代码可以与常规 int 数组或列表一起正常工作。

关于c# - 在 LINQ 中连接 2 个具有不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46607179/

相关文章:

javascript - 从数据表创建复杂的 json C#

c# - 将 Messagebox 放在任何项目的任何 UserControl 中的任何位置时出现 InvalidOperationException

c# - LINQ to EF4 日期时间比较问题

c# - 如何使用退出代码 : C# 退出程序

c# - 当参数不为空 Npgsql 时,在 linq 查询中包含 where 子句

c# - 如何将字典列表转换为 IDictionary “C#”

c# - AddOrUpdate-ing 时锁定 ConcurrentDictionary?

c# - 防止在调整 Windows 窗体大小时重绘控件

c# - LinqToSql 查询中的条件快捷方式

c# - LINQ to Entities Any() 和 Contains() 列表较小,速度较慢