来自Java,我是C#和LINQ的新手。在我们的代码库中有很多查询似乎没有被优化构建。在以下查询中,GroupBy lambda表达式创建一个匿名数据类型。我无法在网上找到任何使用GroupBy的例子。有没有办法简化这个查询,并仍然返回相同的结果?这个LINQ查询可以被简化吗?
List<MachineMetrics> machines = prod.Where(p => p.TimeProduced >= start &&
p.TimeProduced <= end &&
(jobID == -1 ? true : (p.JobID == jobID && p.Job.MachineID == MachineID))).
GroupBy(x => new
{
MachineName = x.Job.Machine.MachineName,
MachineID = x.Job.MachineID,
JobName = x.Job.JobName,
JobID = x.JobID
}).
Select(item => new MachineMetrics()
{
MachineName = item.Key.MachineName,
MachineID = item.Key.MachineID,
JobName = item.Key.JobName,
JobID = item.Key.JobID
}).
ToList<MachineMetrics>();
编辑:感谢您的帮助。问题是Equals()和GetHashCode()方法并没有为这个类提供。一旦我添加了那些我使用@Ladislav Mrnka建议的代码,并且一切按预期工作。
[下面是一个例子GroupBy使用像这样](http://stackoverflow.com/questions/847066/group-by-multiple-columns-linq)(不同的语法,但相同的结果) –
但为什么赋值给变量?链接中的示例仅显示:group x by new {x.Column1,x.Column2} – Jason
您只是使用该组来强制区分对吗? –