是否可以从IQueryable<Change>
集合和Sum()
此集合中的某些字段中获取一个对象?
我写了这段代码:
Changes.Aggregate(new TaskInfo(), (info, change) => new TaskInfo
{
TaskId= change.TaskId,
UserId = change.UserId,
Hours = info.Hours + change.BaseDiff,
EffectiveHours = info.EffectiveHours + change.Diff
// Other fields..
});
我知道我的收藏集包含TaskId
和UserId
字段的相同值。
我想我可以这样做:
var result = new TaskInfo();
foreach (var change in Changes.AsEnumerable())
{
result.TaskId = change.TaskId;
result.UserId = change.UserId;
result.Hours += change.BaseDiff;
///... other fields
}
由于构建新的额外对象,第一个解决方案看起来并不漂亮,而第二个解决方案因为每次迭代都设置了 Ids 字段。有没有更好的解决方案?
答案 0 :(得分:1)
您可以像这样使用Linq Query:
from c in Changes
group c by new {c.TaskId, c.UserId} into g
select new TaskInfo(){
UserId = g.Key.UserId,
TaskId = g.Key.TaskId,
Hours = g.Sum(x => x.BaseDiff),
EffectiveHours = g.Sum(x => x.Diff)
}