[英]LINQ Expression accessing more fields
我真的是使用LINQ的新手,我想知道我需要對以下表達式進行操作以獲取更多字段
public class Foo
{
public string Name {get;set;}
public string Manufacturer {get;set;}
public float Price {get;set;}
}
var result= (
from row in dt.AsEnumerable()
group row by row.Field<string>("NAME") into g
select new Foo
{
Name = g.Key,
Price=g.Min (x =>x.Field<float>("PRICE"))
//Manufacturer = ????
}
).ToList();
我基本上需要從MANUFACTURER字段中獲取Manufacturer並將其值設置在對象中。 我試過了:
row.Field<string>("MANUFACTURER")
//and
g.Field<string>("MANUFACTURER")
但是我沒有運氣來訪問DataTable中的字段。 誰能告訴我我在做什么錯?
因此,您想按名稱分組。 但是,您要如何匯總每個名稱組的制造商?
假設您只想選擇第一家制造商:
var result= (
from row in dt.AsEnumerable()
group row by row.Field<string>("NAME") into g
select new Foo
{
Name = g.Key,
Price=g.Min (x =>x.Field<float>("PRICE")),
Manufacturer = g.First().Field<string>("MANUFACTURER")
}
).ToList();
也許您反而想用分隔符將所有內容連接起來:
// ...
Manufacturer = string.Join(",", g.Select(r=> r.Field<string>("MANUFACTURER")))
按照您的邏輯,如果僅按名稱分組,則可能有多個制造商。 為了說明這一點,請考慮數據結構支持的以下數據。
例
如果僅按“ ProductA”分組,則制造商是[“ ManufacturerA”,“ ManufacturerB”]的集合
潛在解決方案
您可以按名稱和制造商分組,然后訪問名稱和制造商
var result= (
from row in dt.AsEnumerable()
group row by new
{
row.Field<string>("NAME"),
row.Field<string>("MANUFACTURER")
} into g
select new Foo
{
Name = g.Key.Name,
Manufacturer = g.Key.Manufacturer,
Price=g.Min (x =>x.Field<float>("PRICE"))
}
).ToList();
基於評論“ 我正在嘗試以最便宜的價格和制造商來命名。 ”
var result= (
from row in dt.AsEnumerable()
group row by row.Field<string>("NAME") into g
let x = new
{
Name = g.Key.Name,
Price=g.Min (x =>x.Field<float>("PRICE"))
}
where (row.Name == x.Name && row.Price == x.Price)
select new Foo
{
Name = row.Name,
Manufacturer = row.Manufacturer,
Price= row.Price
}
).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.