这是我想要转换为Linq的SQL查询。我正在使用通用的对象列表,而不是DataTable,如果这是相关的。
Select Max(Date), ID, Property1, Peroperty2 From List Group By ID
请帮忙。
答案 0 :(得分:4)
虽然您的SQL无效,Property1
且Property2
必须是您的聚合的一部分,但这将按ID,Property1,然后依次按Property2分组,这是我认为您正在寻找的:
from obj in List
group obj by new {obj.ID, obj.Property1, obj.Property2 } into g
select new
{
ID = g.Key.ID,
Property1 = g.Key.Property1,
Property2 = g.Key.Property2,
MaxDate = g.Max(p => p.Date)
}
相当于:
Select Max(Date), ID, Property1, Peroperty2
From List
Group By ID, Property1, Property2
答案 1 :(得分:1)
正如Steve所说,如果没有Property1等,你的SQL在聚合子句中是无效的。但是,在我看来,你试图获取那些'行'的数据,其中日期等于Id''行'组的最大日期?
这就是这样的:
recs.GroupBy(r => r.Id).SelectMany(g => g.Where(r => r.Date == g.Max(a => a.Date)))
按ID分组,获取日期与该组的最大日期匹配的项目的IEnumeration,并将它们展平为单个IEnumeration - 然后可以迭代或任何您想要的。
编辑:顺便说一句,在查询语法中,我能做的最好的事情(花了我一段时间......)就像是:
from r in recs
where r.Date ==
(from sr in recs
where sr.Id == r.Id
select sr.Date).Max()
select r;
编辑2:
实际上更像是:
recs.Where(r => r.Date == recs.Where(sr => sr.Id == r.Id).Max(a => a.Date)).Select(r => r)
用流畅的语法,这对我来说并不像我做的第一种方式那样好......我真的不喜欢查询表达式语法,这很有趣因为我很放心使用SQL和查询语法更喜欢SQL。