2017-05-09 72 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); } 

让我知道如果我错过了你的意图。