[英]LINQ Get Distinct values and fill LIST
我試圖找出是否可以使用LINQ向我提供我在DataTable(FirstName,LastName,QTY)中的一些數據的不同值。 我可以獲得不同的值並填充我的列表,但我必須運行兩個不同的LINQ查詢來獲取它....我相信有更好的方法來做到這一點:)
任何建議將不勝感激(LINQ非常新)
碼:
public static List<StudentData> LinqDistinct(DataTable dt)
{
DataTable linqTable = dt;
//get the distinct values
var query =
(from names in dt.AsEnumerable()
select new {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).Distinct();
//fill my list with the distinct values
List<StudentData> sList = (from sa in query.AsEnumerable()
select new StudentData
{
FirstName = sa.FirstName,
LastName = sa.LastName
//Qty = names.Field<int>("Qty")
}).ToList();
return sList;}
任何理由都不要簡單地在不同之后進行投影,你可能需要在Distinct之后的AsEnumerable(),但這不是什么大不了的事。
public static List<StudentData> LinqDistinct(DataTable dt)
{
DataTable linqTable = dt;
return
(from names in dt.AsEnumerable()
select new {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).Distinct().Select(x =>
new StudentData() { FirstName=x.FirstName, LastName=x.LastName})
.ToList();
}
從您的問題中不清楚數量是DataTable中的值,還是給定項目的重復數量,如Ecyrb的答案。 但是,如果您StudentData
類實現IEquatable<StudentData>
或覆蓋Equals方法,這應該工作:
public static List<StudentData> LinqDistinct(DataTable dt)
{
return dt.AsEnumerable()
.Select(row => new StudentData
{
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName"),
Qty = row.Field<int>("Qty")
})
.Distinct()
.ToList();
}
如果StudentData
不支持值比較,並且您無法將該支持添加到類中,則可能必須創建IEqualityComparer<StudentData>
並將其傳遞給Distinct
方法。
很確定你可以這樣做......
List<StudentData> sList = (from names in dt.AsEnumerable().Distinct() // I am not sure if you even have to call AsEnumerable()
select new StudentData() {
FirstName = names.Field<string>("FirstName"),
LastName = names.Field<string>("LastName")
}).ToList();
你可以使用GroupBy
:
public static List<StudentData> LinqDistinct(DataTable dt)
{
List<StudentData> results = dt.AsEnumerable()
.GroupBy(row =>
{
FirstName = row.Field<string>("FirstName"),
LastName = row.Field<string>("LastName")
})
.Select(group => new StudentData
{
FirstName = group.Key.FirstName,
LastName = group.Key.LastName,
Qty = group.Count()
})
.ToList();
return results;
}
class StudentData
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Qty { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.