簡體   English   中英

LINQ 到 SQL 與 group by 子句與聚合 function

[英]LINQ to SQL with group by clause with aggregate function

對於在訪問數據庫中寫入的查詢,我需要等效的 LINQ 到 SQL 查詢。 下面是access數據庫中的查詢。

SELECT  Table1.ID, Table1.CODE, MIN (Table1.COST) 
FROM Table1 GROUP BY Table1.ID, Table1.CODE

在這個查詢中,我得到 COST,它是給定重復代碼的最小值

下面的查詢給出錯誤“無效的匿名類型成員聲明器。必須使用成員分配、簡單名稱或成員訪問來聲明匿名類型成員。”

var ptQ = from i in
(from uh in ptTable
 select new
 {
     uh.ID, uh.CODE, uh.COST
 })

group i by new { i.ID, i.CODE }
into g

select new
{
    g.Key.ID, g.Key.CODE, g.Min(uh => uh.COST)
};

您需要為Min調用指定屬性名稱:

select new {g.Key.ID, g.Key.CODE, MinimumCost = g.Min(uh=>uh.COST)};

如果屬性值是屬性或字段訪問(根據 ID 和 CODE),則 C# 編譯器將推斷名稱,因此上述等價於:

select new { ID = g.Key.ID,
             CODE = g.Key.CODE,
             MinimumCost = g.Min(uh=>uh.COST) };

就我個人而言,如果它們不是慣用的 C# 名稱,我會在任何地方指定名稱,否則:

select new { Id = g.Key.ID,
             Code = g.Key.CODE,
             MinimumCost = g.Min(uh=>uh.COST) };

您需要告訴它調用匿名類型中的最后一個值的內容(請注意,對於直接成員訪問成員( g.Key.IDg.Key.CODE ),可以推斷名稱(分別為IDCODE ):

select new {g.Key.ID, g.Key.CODE, MinCost = g.Min(uh=>uh.COST)};

如果需要,您還可以為其他成員提供明確的名稱:

select new {Id = g.Key.ID, Code = g.Key.CODE, MinCost = g.Min(uh=>uh.COST)};

您應該能夠在一個語句中做到這一點:

from i in Table1
group i by new { i.ID, i.CODE } into g
select new { g.Key.ID, g.Key.CODE, COST = g.Min(x => x.COST) }

暫無
暫無

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

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