C# 具有group by子句和聚合函数的LINQ to SQL
对于在access数据库中编写的查询,我需要等效的LINQ到SQL查询。下面是access数据库中的查询C# 具有group by子句和聚合函数的LINQ to SQL,c#,linq,C#,Linq,对于在access数据库中编写的查询,我需要等效的LINQ到SQL查询。下面是access数据库中的查询 SELECT Table1.ID, Table1.CODE, MIN (Table1.COST) FROM Table1 GROUP BY Table1.ID, Table1.CODE 在这个查询中,我得到了给定重复代码的最小成本 下面的查询给出错误“无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问权限声明匿名类型成员。” 您需要告诉它如何调用anon类型中的最后一个值(
SELECT Table1.ID, Table1.CODE, MIN (Table1.COST)
FROM Table1 GROUP BY Table1.ID, Table1.CODE
在这个查询中,我得到了给定重复代码的最小成本
下面的查询给出错误“无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问权限声明匿名类型成员。”
您需要告诉它如何调用anon类型中的最后一个值(请注意,对于直接成员访问成员(
g.Key.ID
和g.Key.code
),可以推断名称(ID
和code
):
如果需要,还可以为其他成员提供显式名称:
select new {Id = g.Key.ID, Code = g.Key.CODE, MinCost = g.Min(uh=>uh.COST)};
您需要为
Min
调用指定属性名称:
select new {g.Key.ID, g.Key.CODE, MinimumCost = g.Min(uh=>uh.COST)};
如果属性值是属性或字段访问(根据ID和代码),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) };
您应该能够在一句话中做到这一点:
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) }
我认为MS指南指的是首字母缩写,因此
Id
是有效的;p@Marc:我实际上检查了指南,它们明确地指出Id
和Ok
。其他两个字母的首字母缩略词/缩写完全是大写。当然,MS也遵循这一原则;p(模糊地指向Min(…)
method…@Marc:Min方法很好-它是三个字母…(但“id”有时是id,有时是id。)3个字母的规则是大写-我指的是缩写指导,它建议不要缩短。在v7文档中,示例是GetWin
vsGetWindow
。我想这归结为对Min
vsMinimum
-meh的主观调用,我不必担心;p
select new { Id = g.Key.ID,
Code = g.Key.CODE,
MinimumCost = 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) }