2012-02-16 47 views
0

我有字符串的數組說: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 
}; 

我如何在這裏使用的查詢withou在查詢中指定每個rowfield? 如何迭代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(); 

但問題是它不返回不同的values.Any想法?

回答

0

開始具有鮮明的DataRows使用this overload of Distinct()

_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(); 
    } 
}