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

C#如何对公共类对象使用Order by/sorting

使用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);

只需将方括号移到你目前发布的内容上,你就可以了。

注意:请注意问题的格式,它可能会极大地改变问题的含义,这就是这里发生的情况,因为类型参数最初不可见