2015-02-24 31 views
0

我想從DataView中選擇一些字段,並在選擇這些字段後,在這些字段上應用.Distinct()。如何從DataView中選擇多個字段並應用.Distinct()使用LINQ

現在,我用這個代碼:

DataView dvGroups = new DataView(); 
dvGroups = GetDataFromDatabase(); //-- Fill Dataview 
var groups = dvGroups.Table.AsEnumerable() 
          .Where(x => x.Field<int>("GroupId") != 0) 
          .Select(p => p.Field<int>("GroupId")) 
          .Distinct() 
          .ToArray(); 

它只是選擇一個字段(即"GroupId")。但是,現在我想選擇多個字段(如"GroupId", "GroupName"),然後獲取不同的值。

我該如何實現這個任務?

+0

@Dovnvoter:能否請你告訴我,之所以投下來? – 2015-02-24 10:21:49

回答

1

您可以創建匿名對象:

.Select(p => new { 
    GroupId = p.Field<int>("GroupId"), 
    Something = p.Field<string>("Something"), 
}) 
.Distinct().ToArray(); 

例如,由於匿名類型是 「兼容」 Distinct()(見LINQ Select Distinct with Anonymous Types),因爲編譯器生成Equals/GetHashCode方法。

或者你可以使用Tuple

.Select(p => Tuple.Create(p.Field<int>("GroupId"), p.Field<string>("Something"))) 

但它們通常是不太清楚。

更復雜的是創建類,並實現EqualsGetHashCode

1

您可以使用匿名類型

var groups = dvGroups.Table 
      .AsEnumerable() 
      .Where(x => x.Field<int>("GroupId") != 0) 
      .Select(p => new 
         { 
          id = p.Field<int> ("GroupId"), 
          name = p.Field<string> ("Name")) 
         }).Distinct().ToArray(); 
相關問題