C#如何对公共类对象使用Order by/sorting
本文关键字:Order by sorting 对象 | 更新日期: 2023-09-27 18:07:58
这是我关于Stack Overflow的第一篇文章。希望我能尽快得到答案。
我有一个公共类ExcelValues,它也在产品数组中。请参阅以下声明:
public class ExcelValues
{
public string SalesCompany;
public string Customer;
public string CustomerNr;
public Product[] Products;
}
public class Product
{
public string Code;
public string Description;
public string Category;
public string Quantity;
public string PVCVBlackWhite;
public string PVCVColor;
public string EndUserPriceEuro;
public string EndUserPrice;
public string DealerGPPercentage;
public string DealerPriceEuro;
//For Product Ordering;
public string ProductOrder;
}
我应该将值写入excel文件,但产品的排序不正确,所以我添加了值为0,1,2等的ProductOrder。
现在,在使用这个excelvalue之前,我想按产品顺序对产品行进行排序。
有什么想法吗?
我尝试IEnumerable,但语法错误:代码:
IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder);
错误1无法隐式转换类型'System.Linq.IOrderedEnumerable<KyoceraCL.Product>'to'System.Collections.Generic.IEnumerable<京瓷CL产品[]>'.An显式转换存在(是否缺少强制转换?(
提前谢谢。Sabby
使用IEnumerable<T>
而不是非通用IEnumerable
接口:
IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder);
您可以创建一个方法来遍历所有产品,并获得ProductOrder的最高/最低值(取决于您希望如何排序(。当你找到最高/最低时,按顺序将其添加到列表中。
我用您最初提供的通用IEnumerable测试了您的代码,它按预期工作。。样品I测试:
ExcelValues outputVals = new ExcelValues();
Product p1 = new Product();
p1.ProductOrder = "a";
Product p2 = new Product();
p2.ProductOrder = "b";
Product p3 = new Product();
p3.ProductOrder = "c";
outputVals.Products = new Product[] { p1, p3, p2 };
IEnumerable sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder);
//a, b, c
使用通用IEnumerable
无通用IEnumerable是对象的集合。它有一个方法GetEnumerator((,它允许您迭代枚举表中的所有objects
。
IEnumerable<Type>
基本上是定义在角括号<Type>
内的Type
的集合。它有一个方法GetEnumerator((,它允许您迭代枚举表中的所有Type元素。
建议使用第二个,因为不需要强制转换,而且您总是知道容器的类型
还有:
IEnumerable是所有可以枚举的非泛型集合的基本接口。有关此接口的泛型版本,请参阅System.Collections.generic.IEnumerable。IEnumerable包含一个返回IEnumerator的方法GetEnumerator。IEnumerator通过公开Current属性以及MoveNext和Reset方法,提供了在集合中迭代的能力。
有关更多信息,请参阅此处
您发布的代码不会重现您发布的错误。
相反,您的实际代码可能看起来像这样:
IEnumerable<Product[]> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder);
只需将方括号移到你目前发布的内容上,你就可以了。
注意:请注意问题的格式,它可能会极大地改变问题的含义,这就是这里发生的情况,因为类型参数最初不可见