将数据表中两列的值合并为一个列表

时间:2021-04-07 23:38:26

标签: c# linq

我正在尝试通过组合数据表中两列中的数据并获取不同的值列表来构建数据表中的整数列表。

为了获取数据表..我正在调用一个存储过程(我无法编辑)

在我调用我的方法返回存储过程返回的数据表之后.. 我想查看数据表中的两列并获取这些列中的值的列表。

存储过程返回的数据表是这样的:

enter image description here

我想获取 MailerKey 和 BillToKey 列中的值列表。
做这个的最好方式是什么?我可以使用 Linq 来执行此操作吗?

到目前为止我已经尝试过:

    using(DataTable dt = getCustomers())
    {
        List<int> MailerKeys = dt.AsEnumerable().Select(x => x.Field<int>("MailerKey")).Distinct().ToList();
        List<int> BillToKeys = dt.AsEnumerable().Select(x => x.Field<int>("BillToKey")).Distinct().ToList();
    }

但是我现在如何组合这些值?

结合我的意思是,得到一个包含来自两列的不同值的列表......所以例如: 我应该回来:

275
58
250
50
59
99
55

2 个答案:

答案 0 :(得分:2)

你可以:

  • 创建一个 HashSet<int> 并将两个列表添加到其中;
  • 将一个列表添加到另一个列表并使用 Distinct 中的 System.Linq

例如:

var a = new[] { 1, 2 }; // Could be any IEnumerale<int>
var b = new[] { 2, 3 }; 

var hash = new HashSet<int>(a);
hash.UnionWith(b);

Console.WriteLine(string.Join(",", hash)); // Prints 1,2,3

答案 1 :(得分:0)

可以使用Linq来实现“组合”这一步。 首先使用 Concat 连接您的列表,然后使用 Distinct 仅保留唯一值。

using(DataTable dt = getCustomers())
{
    var mailerKeys = dt.AsEnumerable().Select(x => x.Field<int>("MailerKey")).Distinct().ToArray();
    var billToKeys = dt.AsEnumerable().Select(x => x.Field<int>("BillToKey")).Distinct().ToArray();

    var combinedDistinctKeys = mailerKeys.Concat(billToKeys).Distinct();
}

注意事项:

  • 'combinedDistinctKeys' 尚未枚举,例如使用 ToArray 或 ToList 会发生这种情况;
  • 我更喜欢将 ToArray 用于源列表,因为我知道我不需要 List<> 功能。

有关来自 Linq 的 Concat 方法的更多信息,请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.concat?view=net-5.0

相关问题