我在确定是否可以使用LINQ对类进行自定义排序或是否需要手动进行排序时遇到问题。
我有以下课程: -
public class Opportunity : BaseEntity {
[Key]
public int OpportunityID { get; set; }
public virtual ICollection<OpportunityProduct> OpportunityProducts { get; set;}
}
public class OpportunityProduct : BaseEntity {
[Key]
public int OpportunityProductID { get; set; }
public SaleType SaleType { get; set; }
public decimal SaleValue { get;set;}
}
我想返回按商机产品总和排序的商机列表,例如: -
var opportunities = opportunities.OrderBy( o => o.OpportunityProducts.xxx).ToList();
机会可以有许多机会产品,而OpportunityProduct的“价值”因SaleType而异。
这方面的一个例子如下: -
//Rental Products
var rentalValue = SaleValue * 12;
//Purchase Products
var saleValue = SaleValue;
机会也可以有多种不同类型的OpportunityProducts,也就是说机会可以将Sale作为一个OpportunityProduct而租赁作为另一个机会产品。
排序是ICollection的总价值,也就是每个OpportunityProduct的总和。
谢谢,
答案 0 :(得分:1)
排序是
ICollection
的总价值,也就是每个人OpportunityProduct
的总和。
然后您需要Sum(...)
中的OrderBy
:
var orderedOpportunities = opportunities
.OrderByDescending( o => o.OpportunityProducts.Sum(p => p.SaleValue))
.ToList();
使用OrderByDescending
会优先考虑列表开头的最高机会。
请注意,此方法假设所有商机产品同时适用,即您可以同时销售和租赁商品。如果不是这种情况,请使用Max
代替Sum
:
var orderedOpportunities = opportunities
.OrderByDescending( o => o.OpportunityProducts.Max(p => p.SaleValue))
.ToList();