我有一个包含大约15个不同字段的表,其中一些是JobID(整数字段),Cost(整数字段)和LastUpdated(DateTime字段)
JobID Cost LastUpdated 1 10 10-July-2011 1 15 11-June-2011 2 25 5-May-2011 1 15 12-April-2011
是否可以编写一个LINQ查询来获取作业ID = 1的成本总和以及这样的成本产生的最后日期?
上面的示例数据的示例查询输出如下所示:
40 , 10-july-2011
目前我正在使用这样的两个不同的linq查询,在这种特殊情况下,从网站上对数据库进行了两次点击。
//for last updated
(from row in MyTable where row.JobID == 1
orderby row.LastUpdated descending
select row.LastUpdated).First()
//for sum of cost
(from row in MyTable
where row.JobID == 1
select row.Cost).Sum()
在这种情况下,一个linq查询会更好吗?在整个页面加载过程中类似这样的情况将导致数据库的多次点击,总共约18次到9个不同的表。在将sum和LastUpdated日期组合在一个查询中时,我试图将该命中数减少到9,每个表一个。
感谢您的时间......
答案 0 :(得分:2)
你可以用这个:
MyTable.Where(x => x.JobID == 1)
.OrderByDescending(x => x.LastUpdated)
.GroupBy(x => x.JobID)
.Select(x => new { LastUpdated = x.First().LastUpdated,
Sum = x.Sum(y => y.Cost) } );
答案 1 :(得分:2)
是的,你可以这样做group
by
var query = from row in MyTable
group row by row.JobID into rows
where rows.Key == 1
select new
{
LastUpdated = rows.Select(x => x.LastUpdated).OrderByDescending(x => x).First(),
Cost = rows.Sum(x => x.Cost),
};