2017-05-09 4 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"); 

選択方法のIEnumerable型を返す、そして[並べ替えは、しかし、エラーをスローSystem.Linq.DynamicのIEnumerableのOrderBy

んプロパティまたはフィールド 'name' がタイプに存在しない '文字列'

答えて

0

あなたコードはちょっと怪しいです、または少なくとも不完全なので、私はあなたがこのスニペットの外に出ていることを理解することができませんでした。

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

あなたのコードは多くの面でコンパイルされていないようにも思えます。これは、古いVisual Studioを使用している可能性があります。これはコンパイルするために取得するために、私は(私はあなたがソートが実際に起こることを見ることができるように、アルファ順に混ざっていることに注意しましょう)そうのような最初の部分を変更:その後

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"), 
}; 

、それから見えますあなたのコードはあなたがstuのリストを返すことを期待しているが、文字列のリストを戻しているかのように。私がここでやるべきことは、リストを最初に並べ替え、並べ替えられた文字列リストを選択して戻すことです。

var data = list.OrderBy(s => s.Name).Select(s => s.Name).ToList(); 
foreach(string str in data) { Console.WriteLine(str); } 

あなたが本当に元に戻したいのは、並べ替えられたstuのリストですので、そのように変更してください。

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

私があなたの意図を見逃しているかどうか教えてください。