我正在尝试通过组合数据表中两列中的数据并获取不同的值列表来构建数据表中的整数列表。
为了获取数据表..我正在调用一个存储过程(我无法编辑)
在我调用我的方法返回存储过程返回的数据表之后.. 我想查看数据表中的两列并获取这些列中的值的列表。
存储过程返回的数据表是这样的:
我想获取 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
答案 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();
}
注意事项:
有关来自 Linq 的 Concat 方法的更多信息,请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.concat?view=net-5.0