[英]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; }
}
根据金额订购出价不会引发该错误。 问题是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.