[英]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.ID
和g.Key.CODE
),可以推斷名稱(分別為ID
和CODE
):
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.