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

Select方法返回IEnumerable的類型,然後排序依據,但拋出的錯誤System.Linq.Dynamic IEnumerable的排序依據

無屬性或字段 '名稱' 存在型 '字符串'

回答

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

如果你真的想回到select是一個排序列表stu,那麼你會像這樣修改。

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

讓我知道如果我錯過了你的意圖。