我已经看到了很多这个问题的答案,但遗憾的是无法将它们置于我的特定场景中,因为当我尝试在分组LINQ语句中连接字符串时,我被限制为{{{{{ 1}}这似乎不起作用。
基本上,我在代码中有两个DataTable,每个DataTable有四个记录(所有字符串)。我需要将两个列组合在一起,然后将其他两个字段连接到','分离器。
分组的基础对于两个表是相同的,但不同列的组是相同的,所以我假设我可以将解决方案应用于另一个实例。
我在代码中有以下DataTable:
我需要通过CONTACT和EMAIL对这个DataTable进行分组,同时将REFERENCE和ATTACHMENT连接到',' separator,生成以下DataSet:
然后我有第二个DataTable,我需要通过REFERENCE和ATTACHMENT分组,同时将CONTACT和EMAIL连接到','分隔器。 DataSet当前包含以下数据:
我想用这个集合实现的是一个包含以下信息的DataTable:
答案 0 :(得分:2)
以下查询给出了预期的输出: -
var result = dt1.AsEnumerable()
.GroupBy(x => new { Contact = x.Field<string>("CONTACT"),
Email = x.Field<string>("EMAIL") })
.Select(x => new
{
REFERENCE = String.Join(",",x.Select(z => z.Field<string>("REFERENCE"))),
CONTACT = x.Key.Contact,
EMAIL = x.Key.Email,
ATTACHMENT = String.Join(",",x.Select(z => z.Field<string>("ATTACHMENT")))
});
输出:
此查询将返回匿名类型,而不是DataTable。如果您希望将DataTable作为输出,那么您必须使用foreach
循环创建一个,或者您可以通过实施MSDN中提到的扩展方法来使用CopyToDataTable
方法。
类似地,您可以查询第二个DataTable。