我有以下课程结构
public class PriceClass
{
public int id { get; set; }
public string price { get; set; }
public int product_id { get; set; }
}
public class NameClass
{
public int id { get; set; }
public string name { get; set; }
}
public class ProductDetails
{
public int id { get; set; }
public string product_type { get; set; }
public List<NameClass> nameCl{ get; set; }
public List<PriceClass> priceCl{ get; set; }
}
public class ProductLists
{
public List<ProductDetails> ProductDet{ get; set; }
}
现在我想用价格对ProductLists进行排序,即在priceClass类
中我尝试了一些解决方案,但这似乎不起作用
prdList = (ProductLists )prdList.ProductDet.OrderBy(r => r.priceCl.OrderBy(x => x.price).ToList());
但似乎我无法解决它的问题 请建议
由于
答案 0 :(得分:2)
这更简单:
sorted_ProductDet_List = prdList.ProductDet
.OrderBy(prDet => prDet.sortPrice)
.ToList());
然后您必须向priceDetail添加一个Property sortPrice
,它返回用作sort sorterium的相关价格。
OrderBy
内的lambda处理原始List(List)的单个元素,并指定排序所基于的变量/ property / etc(可能来自任何嵌套的类或方法)。
答案 1 :(得分:0)
您可以使用自定义IComparer来比较产品详细信息。
public class ProductDetailsComparer : IComparer<ProductDetails>
{
private bool _compareMinPrice;
public ProductDetailsComparer(bool compareMinPrice)
{
_compareMinPrice = compareMinPrice;
}
public int Compare(ProductDetails x, ProductDetails y)
{
var left = _compareMinPrice ? x.priceCl.Min(p => p.price) : x.priceCl.Max(p => p.price);
var right = _compareMinPrice ? y.priceCl.Min(p => p.price) : y.priceCl.Max(p => p.price);
return left.CompareTo(right);
}
}
您可以在OrderBy中使用自定义比较器,如下所示。
// Sort by minimum price
var ascending = productLists.ProductDet.OrderBy(x => x, new ProductDetailsComparer(true)).ToList();
// Sort by maximum price
var descending = productLists.ProductDet.OrderBy(x => x, new ProductDetailsComparer(false)).ToList();
以上只是一个例子。您可以编写适合您要求的自定义比较器。