2016-09-20 27 views
1

Dies ist mein erster Post auf Stack Overflow. Hoffentlich bekomme ich eine schnelle Antwort.C# Verwendung Sortieren nach/Sortieren nach einem öffentlichen Klassenobjekt

Ich habe diese öffentliche Klasse ExcelValues, die auch in einem Produkt-Array hat. Bitte beachten Sie unter der Erklärung:

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; 
} 

soll ich die Werte in eine Excel-Datei schreiben, aber die Bestellung des Produkts nicht richtig kommt, so füge ich hinzu ProductOrder die Werte 0,1,2 etc hat .

Jetzt vor der Verwendung dieser Excelwerte möchte ich die Produktreihen nach Produktbestellung sortieren.

Irgendwelche Ideen?

versuche ich die IEnumerable aber die Syntax gibt mir Fehler: Code:

IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 

Error 1 Cannot implicitly convert type 'System.Linq.IOrderedEnumerable<KyoceraCL.Product>' to 'System.Collections.Generic.IEnumerable<KyoceraCL.Product[]>'. An explicit conversion exists (are you missing a cast?)

Vielen Dank im Voraus. Sabby

+1

@stan: Und ich neu bearbeitet, weil Ihr Rollback die Frage in seinen ursprünglichen unklaren Zustand zurückversetzt. Überprüfen Sie den tatsächlichen ursprünglichen Bearbeitungstext. Das OP legte ursprünglich IEnumerable ', aber formatierte es nicht ordnungsgemäß als Code, so dass der Typparameter nicht in der wiedergegebenen Frage angezeigt wurde. – David

+0

@David: Ah, das ist nicht das erste Mal, dass ich darauf hereinfalle. Danke, dass du darauf hingewiesen hast. – sstan

+0

Stimmt die 'sortedProducts'-Variable * * mit dem * exact * -Typ überein? Oder würde dieses ganze Problem mit einem impliziten Typ irrelevant werden? 'var sortedProducts = ...' – David

Antwort

2

Verwenden IEnumerable<T> anstelle des nicht-generic IEnumerable Schnittstelle:

IEnumerable<Product> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 
1

Sie eine Methode durch alle Produkte gehen machen könnte und die höchste/niedrigste (je nachdem, wie Sie wollen, es zu sortieren) Wert von ProductOrder. Und wenn Sie die höchste/niedrigste gefunden haben, fügen Sie sie zu einer Liste in dieser Reihenfolge hinzu.

1

ich Ihren Code mit dem generischen IEnumerable getestet, zunächst zur Verfügung gestellt und es funktioniert wie beabsichtigt .. Probe I getestet:

 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 
0

Verwendung generische IEnumerable.

Keine generische IEnumerable ist eine Sammlung von Objekten. Es hat die Methode GetEnumerator(), mit der Sie alle objects im Enumerable durchlaufen können.

Ein IEnumerable<Type> ist im Grunde eine Sammlung der Type, die in eckigen Klammern <Type> definiert ist. Es verfügt über die Methode GetEnumerator(), mit der Sie alle Type-Elemente im Enumerable durchlaufen können.

Die zweite wird am meisten empfohlen, da es keine Notwendigkeit zu werfen gibt und Sie immer über den Typ wissen, den der Behälter hat.
auch:

IEnumerable is the base interface for all non-generic collections that can be enumerated. For the generic version of this interface see System.Collections.Generic.IEnumerable. IEnumerable contains a single method, GetEnumerator, which returns an IEnumerator. IEnumerator provides the ability to iterate through the collection by exposing a Current property and MoveNext and Reset methods.

Weitere Informationen finden Sie unter here

0

Der Code, den Sie nicht gepostet nicht den Fehler reproduzieren Sie auf dem Laufenden.

Stattdessen Ihre tatsächliche Code sieht wahrscheinlich so etwas wie diese statt:

IEnumerable<Product[]> sortedProducts = outputVals.Products.OrderBy(Product => Product.ProductOrder); 

Entfernen Sie einfach die eckigen Klammern zu dem, was Sie gerade geschrieben haben, und Sie werden in Ordnung sein.

Hinweis: Bitte beachten Sie die Formatierung Ihrer Frage, es kann die Bedeutung Ihrer Frage drastisch ändern, was hier passiert ist, weil die Typparameter anfänglich nicht sichtbar waren.

Verwandte Themen