Linq to Entities to Select Data with Max Date?

时间:2018-12-13 15:19:13

标签: c# linq

我在选择查询中的其他列时选择maxDate时遇到问题

这是我尝试将linq转换为实体的查询。 tableexpression将返回ID列表以及相应的最大insertdates

    WITH TableExpression
AS
(
SELECT   Id, Max(InsertDate) as MaxInsertDate
FROM     MyTable
WHERE    UploadDate BETWEEN '10/1/2018' AND '12/12/2018'
GROUP BY Id
)

SELECT  * 
FROM    MyTable t Join TableExpression on t.Id = TableExpression.Id
WHERE   t.InsertDate = TableExpression.MaxInsertDate    
        AND UploadDate BETWEEN '10/1/2018' and '12/12/2018' 

编辑更新:感谢下面的查询,如果执行.ToList(),此查询将为我提供所需的信息。但是,我需要将此查询作为联接添加

  var maxDateQuery = ctx.MyEntity
        .Where(m => m.InsertDate >= fromDate && m.InsertDate <= toDate)
        .ToArray()
        .GroupBy(x => x.Id)
        .Select(g => new { Id = g.Key, MaxInsertDate = g.Max(y => y.InsertDate) }).AsQueryable();

第二个问题是连接子句

var mainQuery = ctx.MyTable
        .Where(m => m.InsertDate >= fromDate && m.InsertDate <= toDate).AsQueryable();



 var joinedQuery = maxDateQuery.Join(mainQuery, max => max.Id, main => main.Id, (mdq, mq) => new { maxRecords = mdq, mainRecords = mq })
                                                  .Select(joined => new
                                                  {
                                                      main = joined.mainRecords,
                                                      max = joined.maxRecords
                                                  }).ToList();

点击连接语句后,我会遇到一个疯狂的错误: “此方法支持LINQ to Entities基础结构,不能直接在您的代码中使用。”

1 个答案:

答案 0 :(得分:3)

从数据库中选择记录后,可以对内存结果进行分组,例如:

IEnumerable<a'>

这应该给您一个a',其中Id是具有MaxInsertDate和{{1}}属性的匿名类型。

尝试将相当复杂的SQL查询转换为LINQ-To-Entities是没有意义的。您应该像上面那样对内存结果进行分组,或者使用原始SQL查询