如何根据其子类(集合)的属性对类进行排序?我正在做一个产品和出价项目,其中有些产品没有出价,有些产品会有出价。 这是我一直在尝试的方法,但问题是它给了我一个“至少一个对象必须实现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; }
}
答案 0 :(得分:0)
按金额排序出价不会引发该错误。问题是x.Bids.OrderBy(...)
返回了一个出价列表,因此您试图根据出价列表订购产品。由于无法将通用列表与另一个列表进行比较,因此您需要更加具体。
如果您想根据投标数量订购产品,可以使用此
productList.OrderBy(x => x.Bids.Count());
或者,如果您想根据出价总额订购产品,可以使用
productList.OrderBy(x => x.Bids.Sum(b => b.BidAmount));