gpt4 book ai didi

c# - 如何根据 EF 子表中的列对项目进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:57 25 4
gpt4 key购买 nike

我有两个表( FactorItemsProducts ),我的 Factoritems表包含列 Id, ProductId, Qty, IsBuyProducts表包含列 Id , Name ,……

我想使用代码选择我的产品,其中我的 Qty列有一个值(用于在索引中显示流行 Products),我有一个来自 ProductId 的外键FactorItems 中的列表到 Id Product 中的列表。

我在 ASP.NET MVC 中使用虚拟 View 模型:

model.BestSellersProducts = blProduct.Select().OrderByDescending(p => p.FactorItems.Select(c => c.Qty)).take(3);

我从 foreach 中的索引中得到这个错误:

An exception of type 'System.ArgumentException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: DbSortClause expressions must have a type that is order comparable.

最佳答案

考虑到您的 ProductFactorItem 具有如下One-to-Zero-or-One 关系:

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public FactorItem FactorItem { get; set; }
}

public class FactorItem
{
[Key, ForeignKey("Product")]
public int ProductId { get; set; }
public int Qty { get; set; }
public bool IsBuy { get; set; }
public Product Product { get; set; }
}

那么您获取前 3 名销售产品的查询应如下所示:

List<Product> products = dbContext.Products.OrderByDescending(p => p.FactorItem.Qty).Take(3).ToList();

考虑到您的ProductFactorItem 具有如下一对多 关系:

public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<FactorItem> FactorItems { get; set; }
}

public class FactorItem
{
public int Id { get; set; }
[ForeignKey("Product")]
public int ProductId { get; set; }
public int Qty { get; set; }
public bool IsBuy { get; set; }
public Product Product { get; set; }
}

那么您获取前 3 名销售产品的查询应如下所示:

var productList = dbContext.FactorItems.GroupBy(fi => new { fi.ProductId, fi.Product.Name }).Select(g => new
{
ProductId = g.Key.ProductId,
ProductName = g.Key.Name,
TotalSoldQty = g.Sum(x => x.Qty)
}).OrderByDescending(x => x.TotalSoldQty).ToList();

关于c# - 如何根据 EF 子表中的列对项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53921377/

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