如何根据EF中子表中的列订购商品

时间:2018-12-25 10:15:19

标签: c# entity-framework linq

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

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

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

Product

我从model.BestSellersProducts = blProduct.Select().OrderByDescending(p => p.FactorItems.Select(c => c.Qty)).take(3); 的索引中收到此错误:

  

EntityFramework.SqlServer.dll中发生了'System.ArgumentException'类型的异常,但未在用户代码中处理

     

其他信息:DbSortClause表达式的类型必须与顺序可比。

1 个答案:

答案 0 :(得分:1)

考虑到您的log4j.logger.com.amazonaws=DEBUG log4j.logger.org.apache.hadoop.fs.s3a=DEBUG log4j.logger.com.amazonaws.request=DEBUG log4j.logger.org.apache.http=DEBUG log4j.logger.org.apache.http.wire=ERROR Product具有FactorItem关系,如下所示:

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; }
}

考虑到您的List<Product> products = dbContext.Products.OrderByDescending(p => p.FactorItem.Qty).Take(3).ToList(); Product具有FactorItem关系,如下所示:

One-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; }
}