【发布时间】:2021-03-02 17:30:44
【问题描述】:
我的数据库中有这样的组数据:
Code ModificationDate
--------------------------
A 2020/01/02
A 2020/01/01
B 2020/01/03
B 2020/01/01
C 2020/01/04
C 2020/01/01
我想从每组代码中获取最新的ModificationDate 的值。
我尝试了一些 linq 查询,但总是遇到同样的错误
要么以可翻译的形式重写查询,要么通过插入对“AsEnumerable”的调用显式切换到客户端评估
为了解决这个问题,我编写了以下代码:
var query = _context.Customers.FromSqlRaw(@"
SELECT t.* FROM(
SELECT[Code], MAX([ModificationDate]) as [ModificationDate]
FROM[Customers]
GROUP BY[Code]
) c
INNER JOIN[Customers] t
ON t.[Code] = c.[Code] AND t.[ModificationDate] = c.[ModificationDate]");
它工作正常,但我想将其转换为不会触发上述错误的 linq 查询。
我不想使用AsEnumerable 或ToList,因为我有很多数据并且将其加载到内存中会很慢。
【问题讨论】:
-
做这样的事情:db.OrderByDescending(x => x.ModificationDate).GroupBy(x => x.ModificationDate).Selectx => x.First()).ToList();
-
它触发了同样的错误:.First()' 不能被翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。 :(
-
您的模型有问题。模型中的每个表都应该是一个 Enumerable() 对象。右键单击模型变量 db 并选择定义以找到模型。
-
.AsEnumerable()是否不将整个数据加载到内存中! -
那么在这个例子中使用 .AsEnumerable() 是一个好习惯吗?
标签: c# sql entity-framework-core