【发布时间】:2012-01-06 14:30:59
【问题描述】:
我有
var result = (from rev in Revisions
join usr in Users on rev.UserID equals usr.ID
join clc in ChangedLinesCounts on rev.Revision equals clc.Revision
select new {rev.Revision,
rev.Date, usr.UserName, usr.ID, clc.LinesCount}).Take(6);
我在不同的表上做了几个连接,与这个问题无关,什么是键,但在这个查询的末尾我的result“table”包含
{Revision, Date, UserName, ID, LinesCount}
现在我执行 e GroupBy 以计算每个用户的总行数。
所以..
from row in result group row by row.ID into g {1}
select new {
g.Key,
totalCount = g.Sum(count=>count.LinesCount)
};
所以我得到了Key=ID 和totalCount=Sum,但是
混乱
我还希望在最终结果中包含其他字段。
在我的理解{1}分组查询之后的“表”包括
{Revision, Date, UserName, ID, LinesCount, TotalCount}
如果我的假设是正确的,为什么我不能这样做:
from row in result group row by row.ID into g {1}
select new {
g.Key,
g.Revision //Revision doesn't exist ! Why ??
totalCount = g.Sum(count=>count.LinesCount)
};
但是
from row in result group row by row.ID into g {1}
select new {
g.Key,
Revision = g.Select(x=>x.Revision), //Works !
totalCount = g.Sum(count=>count.LinesCount)
};
有效!但是 imo,很烂,因为我执行了另一个 Select。
事实上,查看LinqPad SQL 输出我得到 2 个 SQL 查询。
问题
是否有任何优雅和最佳的方式来做到这一点,或者我总是需要运行Select
在分组数据上,为了能够访问存在的字段?
【问题讨论】: