LINQ到SQL的groupby子句与聚合函数
本文关键字:函数 子句 groupby SQL LINQ | 更新日期: 2023-09-27 18:04:56
我需要等效的LINQ到SQL查询在access数据库中编写的查询。下面是access数据库中的查询:
SELECT Table1.ID, Table1.CODE, MIN (Table1.COST)
FROM Table1 GROUP BY Table1.ID, Table1.CODE
在这个查询中,我得到COST,它是给定重复CODE的最小值
下面的查询给出错误"无效的匿名类型成员声明符"。匿名类型成员必须使用成员赋值、简单名称或成员访问来声明。"
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) }