我对Entity Framework和LINQ非常不熟悉。我有一个单独的实体设置有一些列,我想过滤我们的一些特殊行。 其中4行命名为Guid(字符串),Year(短),Month(短)和FileIndex(短)。我想获得Guid-Year-Month的每个现有组合具有最大FileIndex的所有行。
我目前的解决方案如下:
var maxFileIndexRecords = from item in context.Udps
group item by new { item.Guid, item.Year, item.Month }
into gcs
select new { gcs.Key.Guid, gcs.Key.Year, gcs.Key.Month,
gcs.OrderByDescending(x => x.FileIndex).FirstOrDefault().FileIndex };
var result = from item in context.Udps
join j in maxFileIndexRecords on
new
{
item.Guid,
item.Year,
item.Month,
item.FileIndex
}
equals
new
{
j.Guid,
j.Year,
j.Month,
j.FileIndex
}
select item;
我认为应该有一个更短的解决方案,具有更高的性能。有人对我有暗示吗? 谢谢
答案 0 :(得分:0)
你很亲密。实际上选择分组键不是必需的。您只需选择每个组的第一项:
var maxFileIndexRecords =
from item in context.Udps
group item by new { item.Guid, item.Year, item.Month }
into gcs
select gcs.OrderByDescending(x => x.FileIndex).FirstOrDefault();