Linq查询Group By Multiple columns

时间:2012-02-16 08:13:54

标签: linq

我有一个字符串数组说:

String[] Fields=new String[]{RowField,RowField1}

我可以使用下面的查询通过指定值获取值是查询,即RowField和RowField1:

var Result = (
from x in _dataTable.AsEnumerable()
select new
{
    Name = x.Field<object>(RowField), 
    Name1 = x.Field<object>(RowField1)
})
.Distinct();

但是假设我在数组中有很多值,如:

String[] Fields= new String[]
{
    RowField,
    RowField1,
    RowField2,
    .......
    RowField1000
};

如何在不指定查询中的每个字段的情况下使用此处的查询? 我如何遍历LINQ中的数组项?

根据LINQ query and Array of string中的一些建议,我试图使用下面的代码获得结果。

var result = (from row in _dataTable.AsEnumerable()
                 let projection = from fieldName in fields
                      select new {Name = fieldName, Value = row[fieldName]}
                 select projection.ToDictionary(p=>p.Name,p=>p.Value))
             .Distinct();  

但问题是它没有返回明确的值。任何想法?

1 个答案:

答案 0 :(得分:0)

使用this overload of Distinct()开始使用不同的DataRows

_dataTable.AsEnumerable().Distinct(new DataRowEqualityComparer())

DataRowEqualityComparer的位置:

public class DataRowEqualityComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y)
    {
        return x.ItemArray.SequenceEqual(y.ItemArray);
    }

    public int GetHashCode(DataRow obj)
    {
        return string.Join("", obj.ItemArray).GetHashCode();
    }
}