gpt4 book ai didi

时间:2019-03-17 标签:c#linqOrderByDescending withinnerLastOrDefault

转载 作者:行者123 更新时间:2023-11-29 06:27:56 24 4
gpt4 key购买 nike

是否有办法在最后一次购买日期之前对所有客户进行订购?

例如

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com