我在选择查询中的其他列时选择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基础结构,不能直接在您的代码中使用。”
答案 0 :(得分:3)
从数据库中选择记录后,可以对内存结果进行分组,例如:
IEnumerable<a'>
这应该给您一个a'
,其中Id
是具有MaxInsertDate
和{{1}}属性的匿名类型。
尝试将相当复杂的SQL查询转换为LINQ-To-Entities是没有意义的。您应该像上面那样对内存结果进行分组,或者使用原始SQL查询