如何在linq中按2个数组元素进行分组

时间:2015-04-10 11:04:40

标签: c# arrays linq group-by

在数据库之外,我正在尝试创建一个只包含不同值的对象列表。

仅按1列进行分组,这适用于NICE

List<object[]> myList =
    myDataTable.AddRange(entity.MyTable.AsEnumerable().Select(e => new object[]{ e.id, e.foreignKey, e.id, e.name }).GroupBy(x => x[0]).Select(x => x.First()).ToList();

但对于2列我得到错误:

List<object[]> myList =
    myDataTable.AddRange(entity.MyTable.AsEnumerable().Select(e => new object[]{ e.id, e.foreignKey, e.id, e.name }).GroupBy(x => new {x[0], x[1]}).Select(x => x.First()).ToList();

错误消息是:

  

无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问权声明匿名类型成员。

现在我的问题是:我如何按2个数组元素进行分组?

2 个答案:

答案 0 :(得分:1)

正如异常消息所述,您需要以GroupBy的匿名类型声明声明该成员,如下所示: -

List<object[]> myList =
    myDataTable.AddRange(entity.MyTable.AsEnumerable()
              .Select(e => new object[]{ e.id, e.foreignKey, e.id, e.name })
              .GroupBy(x => new { a = x[0], b = x[1] }).Select(x => x.First()).ToList();

答案 1 :(得分:1)

你错误地理解了什么?您应该为您的匿名对象提供属性名称。你可以这样做:

List<object[]> myList =
myDataTable
.AddRange(entity.MyTable.AsEnumerable()
.Select(e => new object[]{ e.id, e.foreignKey, e.id, e.name })
.GroupBy(x => new 
{ 
    propertyName1 = x[0], 
    propertyName2 = x[1]
})
.Select(x => x.First())
.ToList();