簡體   English   中英

LINQ Expression訪問更多字段

[英]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")))

按照您的邏輯,如果僅按名稱分組,則可能有多個制造商。 為了說明這一點,請考慮數據結構支持的以下數據。

  • 產品A,制造商A
  • 產品A,制造商B

如果僅按“ 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.

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