作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有办法在最后一次购买日期之前对所有客户进行订购?
例如
ctx.Customers.OrderByDescending(e => e.Purchases.LastOrDefault().DateTime);
它会是这样的,但是,这是行不通的。它抛出异常
LINQ to Entities does not recognize the method 'Purchase
LastOrDefault[Purchase]
(System.Collections.Generic.IEnumerable`1[Purchase])'
method, and this method cannot be translated into a store expression
编辑:
public class Customer
{
public Customer()
{
Purchases = new List<Purchase>();
}
public int Id { get; set; }
public string Name { get; set; }
[JsonIgnore]
public virtual IList<Purchase> Purchases { get; set; }
}
public class Purchase
{
public int Id { get; set; }
public int IdCustomer { get; set; }
public DateTime DateTime { get; set; }
public virtual Customer Customer { get; set; }
}
在上下文中我确实有类似的东西
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasRequired(s => s.Customer)
.WithMany(p => p.Purchases)
.HasForeignKey(s => s.IdCustomer);
}
最佳答案
ctx.Customers.OrderByDescending(e => e.Purchases.LastOrDefault().DateTime);
看起来像一个上下文查询( Entity Framework ,通常是 dbContext),所以这里有一个 IQueryable 而不是 List。
Entity Framework 会在给出结果之前尝试将其转换为 SQL 语句,但是
SELECT * BOTTOM(X) FROM TABLE ORDER BY Purchases desc
不是一个表达式,但更重要的是 EF 无法识别你想要做什么。
相反,您只想将逻辑翻转为:
SELECT * TOP(X) FROM TABLE ORDER BY Purchases asc
或者:
ctx.Customers.OrderBy(e => e.Purchases.FirstOrDefault().DateTime);
或者您可以在子查询上排序:
ctx.Customers.OrderBy(e => e.Purchases.OrderByDescending(x => x.propertyToSortOn)
.FirstOrDefault().DateTime);
从排序列表的底部获取最后 n 条记录,实际上与从以另一种方式排序的列表中获取前 n 条记录相同:
1,2,3,4,5,6 -> 升序排列的前 3 个 = 1,2,3
6,5,4,3,2,1 -> 按降序排列的底部 3 = 3,2,1
关于时间:2019-03-17 标签:c#linqOrderByDescending withinnerLastOrDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400852/
这个问题已经有答案了: LINQ To Entities does not recognize the method Last. Really? (6 个回答) 已关闭 3 年前。 是否有办法在最后一
我是一名优秀的程序员,十分优秀!