繁体   English   中英

根据作为集合的子类对列表进行排序

[英]Ordering a list based on child class which is a collection

您如何根据作为集合的子类的属性对类进行排序? 我正在做一个产品和投标项目,其中一些产品没有投标,有些产品会有投标。 这是我一直在尝试的,但问题是它给了我一个“至少一个对象必须实现 IComparable”异常。

编辑

目标是根据出价最高或最低的产品对产品进行排序。

升序排序示例

|---------------------|------------------|
|      Product        |  Most Recent Bid |
|---------------------|------------------|
|          1          |         $100     |
|---------------------|------------------|
|---------------------|------------------|
|          2          |         $150     |
|---------------------|------------------|
|---------------------|------------------|
|          3          |         $175     |
|---------------------|------------------|

我的解决方案

productList = Sort == true ?
productList.OrderBy(x => x.Bids.OrderByDescending(y => y.BidAmount)) :
productList.OrderBy(x => x.Bids.OrderBy(y => y.BidAmount));

产品类别

public class Product
    {
        [Key]
        public Guid ProductId { get; set; }
        [MaxLength(30)]
        public string ProductName { get; set; }
        [MaxLength(200)]
        [Required]
        public string ProductDescription { get; set; }
        [Required]
        public string ImgUrl { get; set; }
        [Required]
        public DateTime ExpiryDate { get; set; }

        [Required]
        public DateTime UploadDate { get; set; }
        public ICollection<Bid> Bids { get; set; }
    }

投标类别

public class Bid
    {
        [Key]
        public Guid BidId { get; set; }
        [Required]
        public decimal BidAmount { get; set; }
        [Required]
        public DateTime BidDate { get; set; }
        [Required]
        [ForeignKey("Product")]
        public Guid ProductId { get; set; }
        public Product Product { get; set; }
        [Required]
        [ForeignKey("User")]
        public Guid UserId { get; set; }
        public User User { get; set; }
    }

我曾尝试使用thisthis 中的解决方案,但没有一个涵盖集合属性用例。

根据金额订购出价不会引发该错误。 问题是x.Bids.OrderBy(...)返回一个投标列表,因此您试图根据投标列表订购产品。 由于无法将通用列表与另一个进行比较,因此您需要更加具体。

如果您想根据出价数量订购产品,您可以使用它

productList.OrderBy(x => x.Bids.Count());

或者,如果您想根据出价总额订购产品,您可以使用此

productList.OrderBy(x => x.Bids.Sum(b => b.BidAmount));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM