我在确定是可以使用 LINQ 对类进行一些自定义排序还是需要手动进行排序时遇到问题。
我有以下类(class):-
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;}
}
我想返回按其 OpportunityProducts 总和排序的机会列表,例如:-
var opportunities = opportunities.OrderBy( o => o.OpportunityProducts.xxx).ToList();
一个机会可以有多个机会产品,一个机会产品的“值(value)”因销售类型而异。
一个例子如下:-
//Rental Products
var rentalValue = SaleValue * 12;
//Purchase Products
var saleValue = SaleValue;
一个机会也可以有多种不同类型的机会产品,也就是一个机会可能有一个销售作为一个机会产品,一个租赁作为另一个机会产品。
排序是根据 ICollection 的总值(value),也就是每个单独的 OpportunityProduct 的总和。
谢谢,
最佳答案
The sorting is by the Total Value of the
ICollection
aka the sum of each individualOpportunityProduct
.
然后您需要在 OrderBy
中使用 Sum(...)
:
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();
关于C# LINQ 自定义排序方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48480871/