【发布时间】:2018-12-15 00:51:58
【问题描述】:
在选择查询中的其他列时,我在选择 maxDate 时遇到问题
这是我试图将 linq 转换为实体的查询。表表达式将返回一个 id 列表以及相应的最大插入日期
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();
第二个问题是join子句
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();
当我点击 join 语句时,我遇到了一个疯狂的错误:“此方法支持 LINQ to Entities 基础架构,不打算直接从您的代码中使用。”强>
【问题讨论】:
-
您的最大值仅返回日期,不包含对象中的其他属性。您之前的帖子更好。为什么需要日期范围和最大值?
-
第一个SQL查询需要转成Linq
-
不,它没有。使用原始 SQL 或对从数据库返回的结果进行分组。这比尝试基于 LINQ 语句生成一些 SQL 更容易和更快。
-
帖子是在我发表评论后编辑的。