2017-05-09 3 views
0
var list = new List<stu> { 
    new stu{ id=1,name="123" }, 
    new stu{ id=2,name="a123" }, 
    new stu{ id=3,name="b123" }, 
    new stu{ id=4,name="c123" }, 
    new stu{ id=5,name="d123" }, 
    new stu{ id=6,name="e123" }, 
    new stu{ id=7,name="f123" }, 
}; 

var data = list.Select("name").OrderBy("name"); 

die Select-Methode zurückkehren IEnumerable-Typ, dann SortiertNach jedoch FehlerSystem.Linq.Dynamic IEnumerable SortiertNach

keine Eigenschaft oder ein Feld 'Name' existiert in Typ 'String' werfen

Antwort

0

Ihre Der Code ist ein bisschen wackelig oder zumindest unvollständig, so dass ich nicht herausfinden konnte, was Sie außerhalb dieses Snippets vorhatten. Vorausgesetzt, dass Sie etwas davon haben:

class stu 
{ 
    private int m_id; 
    private string m_name; 

    public int Id { get { return m_id; } set { m_id=value; } } 
    public string Name { get { return m_name; } set { m_name=value; } } 

    public stu(int id,string name) 
    { 
     m_id=id; 
     m_name=name; 
    } 
} 

Es scheint mir, dass der Code nicht einmal an zahlreichen Fronten zusammenstellen würde. Dies könnte daran liegen, dass ich ein älteres Visual Studio verwende. Um dies zu kompilieren, änderte ich den ersten Teil wie so (Sie werden bemerken, dass ich das Alpha, um Ihnen zu erlauben, gemischt, um zu sehen, dass die Sortierung tatsächlich passiert):

var list = new List<stu> 
{ 
    new stu(1,"123"), 
    new stu(2,"f123"), 
    new stu(3,"b123"), 
    new stu(4,"e123"), 
    new stu(5,"d123"), 
    new stu(6,"c123"), 
    new stu(7,"a123"), 
}; 

Danach sieht es aus Ihr Code, als ob Sie eine Liste von stu zurück erwarten, aber eine Liste der Zeichenkette zurückbekommen. Was ich hier tun würde ist, die Liste zuerst zu ordnen, dann auszuwählen und eine sortierte Liste der Zeichenketten zurück zu erhalten.

Wenn was Sie wirklich wollen wieder auf der Auswahl ist eine sortierte Liste von stu, dann würden Sie so ändern.

var data = list.OrderBy(s => s.Name); 
foreach(stu s in data) { Console.WriteLine(s.Name); } 

Lassen Sie mich wissen, wenn ich Ihre Absicht vermisse.

Verwandte Themen