我想使用C#将一项基于一个公共属性的项目组合在一起。例如:
class Merchant
{
public string Name { get; set; }
public string Value1 { get; set; }
public string Value2 { get; set; }
public DateTime? Value3 {get; set; }
}
清单包含:
{Name = "1", Value1 = "1", Value2 = "", Value3 = someDatetime}
{Name = "1", Value1 = "", Value2 = "2", Value3 = someDatetime}
{Name = "1", Value1 = "3", Value2 = "", Value3 = someDatetime}
{Name = "1", Value1 = "", Value2 = "4", Value3 = someDatetime}
{Name = "2", Value1 = "5", Value2 = "", Value3 = someOtherDatetime}
注意:空字符串值也可以为null
必需的输出清单:
{Name = "1", Value1 = "1,3", Value2 = "2,4", Value3 = someDateTime}
{Name = "2", Value1 = "5", Value2 = "", Value3 = someOtherDatetime}
可以通过任何单个linq查询来实现吗?
更新:我添加了类型为DateTime的新值。对于每个名称,只有一个日期时间(可以为null)。我该如何在查询中包括呢?
最佳答案
var query = list.GroupBy(m => m.Name)
.Select(g => new Merchant
{
Name = g.Key,
Value1 = String.Join(",", g
.Where(m => !String.IsNullOrEmpty(m.Value1))
.Select(m => m.Value1)),
Value2 = String.Join(",", g
.Where(m => !String.IsNullOrEmpty(m.Value2))
.Select(m => m.Value2)),
Value3 = g.First().Value3
});
已更新,以考虑新的
DateTime?
列。