如何 select 来自 DataView 的多个字段并使用 LINQ 应用 .Distinct()
How to select multiple fields from a DataView and apply .Distinct() using LINQ
我想 select 来自 DataView
的一些字段,并且在 selecting 这些字段之后想要在这些字段集上应用 .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();
它只是 select 单个字段(即 "GroupId"
)。但是,现在我想 select 多个字段(比如 "GroupId", "GroupName"
)然后得到不同的值。
我怎样才能完成这个任务?
您可以创建匿名对象:
.Select(p => new {
GroupId = p.Field<int>("GroupId"),
Something = p.Field<string>("Something"),
})
.Distinct().ToArray();
例如,因为匿名类型是 "compatible" 和 Distinct()
(参见 LINQ Select Distinct with Anonymous Types),因为编译器生成了 Equals
/GetHashCode
方法。
或者您可以使用 Tuple:
.Select(p => Tuple.Create(p.Field<int>("GroupId"), p.Field<string>("Something")))
但他们通常不太清楚。
更复杂的是创建您的 class 并实施 Equals
和 GetHashCode
您可以使用匿名类型:
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();
我想 select 来自 DataView
的一些字段,并且在 selecting 这些字段之后想要在这些字段集上应用 .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();
它只是 select 单个字段(即 "GroupId"
)。但是,现在我想 select 多个字段(比如 "GroupId", "GroupName"
)然后得到不同的值。
我怎样才能完成这个任务?
您可以创建匿名对象:
.Select(p => new {
GroupId = p.Field<int>("GroupId"),
Something = p.Field<string>("Something"),
})
.Distinct().ToArray();
例如,因为匿名类型是 "compatible" 和 Distinct()
(参见 LINQ Select Distinct with Anonymous Types),因为编译器生成了 Equals
/GetHashCode
方法。
或者您可以使用 Tuple:
.Select(p => Tuple.Create(p.Field<int>("GroupId"), p.Field<string>("Something")))
但他们通常不太清楚。
更复杂的是创建您的 class 并实施 Equals
和 GetHashCode
您可以使用匿名类型:
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();