如何简化LINQ查询只是为了过滤掉一些特殊的行

时间:2017-02-09 12:39:15

标签: c# linq select

我对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;

我认为应该有一个更短的解决方案,具有更高的性能。有人对我有暗示吗? 谢谢

1 个答案:

答案 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();