使用LINQ获取不同的行

时间:2012-12-21 15:47:21

标签: .net linq entity-framework distinct

我目前有每个“FileStreamID”的多个记录,但我只想根据最新的“请求日期”获得一个不同的记录

这就是我现在所拥有的:

 var resultx = from v in ctx.vEmailSents
                             where v.Lab_ID == 44
                                 && v.UploadDate >= this.BeginDate
                             select new
                             {

                                 FileStreamID = v.FileStream_ID,
                                 UploadDate = v.UploadDate,
                                 RequestDate = v.DateSent,
                                 TypeDesc = v.TypeDesc
                             };

现在我得到了大约33条记录(但我应该只得到12条)

如何将其更改为仅在文件流ID上为我提供不同的行?

2 个答案:

答案 0 :(得分:4)

vEmailSentFileStream_ID个对象进行分组,并从每个具有最新日期的组项目中进行选择:

 var resultx = from v in ctx.vEmailSents
               where v.Lab_ID == 44
                     && v.UploadDate >= this.BeginDate
               group v by v.FileStream_ID into g
               select g.OrderByDescending(x => x.DateSent)
                       .FirstOrDefault() into lastV
               select new {
                      FileStreamID = lastV.FileStream_ID,
                      UploadDate = lastV.UploadDate,
                      RequestDate = lastV.DateSent,
                      TypeDesc = lastV.TypeDesc                          
               };

答案 1 :(得分:0)

var results = resultx
    .GroupBy(x => x.FileStreamID)
    .Select(g => g.OrderByDescending(x => x.RequestDate).First());