对于在访问数据库中编写的查询,我需要等效的LINQ to SQL查询。以下是访问数据库中的查询。
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)
};
答案 0 :(得分:3)
您需要指定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) };
答案 1 :(得分:1)
您需要告诉它要在anon-type中调用最后一个值的内容(请注意,对于直接成员访问成员(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)};
答案 2 :(得分:0)
你应该能够在一个声明中这样做:
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) }