【问题标题】:How to order items based on a column in child table in EF如何根据 EF 中子表中的列对项目进行排序
【发布时间】:2018-12-26 09:46:42
【问题描述】:

我有两个表(FactorItemsProducts),我的Factoritems 表包含列Id, ProductId, Qty, IsBuyProducts 表包含列IdName,...。

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

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

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

我从foreach 的索引中收到此错误:

EntityFramework.SqlServer.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:DbSortClause 表达式必须具有顺序可比的类型。

【问题讨论】:

标签: c# entity-framework linq


【解决方案1】:

考虑到你的ProductFactorItemOne-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();

考虑到你的ProductFactorItemOne-to-Many 关系如下:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2015-06-27
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多