簡體   English   中英

如何使用LINQ從DataView中選擇多個字段並應用.Distinct()

[英]How to select multiple fields from a DataView and apply .Distinct() using LINQ

我想從DataView選擇一些字段,選擇這些字段后,要在這些字段集上應用.Distinct()。

現在,我使用以下代碼:

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" ),然后獲取不同的值。

我該如何完成這項任務?

您可以創建匿名對象:

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

例如,由於匿名類型與Distinct() “兼容”(請參見LINQ選擇與匿名類型不同 ),因為編譯器會生成Equals / GetHashCode方法。

或者您可以使用元組

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

但是它們通常不太清楚。

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

您可以使用匿名類型:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM