日期:2014-05-20  浏览次数:20785 次

linq返回值的问题!
C# code
 public List<STUDENT> GetList()
        {
            var q = from s in sdc.STUDENT
                    select new STUDENT{SSEX= s.SSEX,SNAME= s.SNAME,SNO=s.SNO};
            return q.OrderBy(s=>s.SNO).ToList(); 
        }

        public List<STUDENT> GetList2()
        {
            return sdc.STUDENT.OrderByDescending(t => t.SNO).Select(s => new { SNO = s.SNO, SSEX = s.SSEX, SNAME = s.SNAME }).ToList();
         }


为什么第一个就可以,第二个就报错?
无法将类型“System.Linq.IQueryable<AnonymousType#1>”隐式转换为“System.Collections.Generic.List<DAL.STUDENT>”。存在一个显式转换(是否缺少强制转换?)

什么原因啊?

------解决方案--------------------
new { SNO = s.SNO, SSEX = s.SSEX, SNAME = s.SNAME }) 匿名类型
------解决方案--------------------
系统不知道你new的是什么类型

new { SNO = s.SNO, SSEX = s.SSEX, SNAME = s.SNAME })
------解决方案--------------------
return sdc.STUDENT.OrderByDescending(t => t.SNO).Select(s => new { SNO = s.SNO, SSEX = s.SSEX, SNAME = s.SNAME }).ToList();
}
是一个匿名类型的List,你把它当成List<STUDENT> 来Return,当然不对啦。

------解决方案--------------------
探讨
那我要返回一个List <student> 类型,要怎么写呢?有没有办法?

------解决方案--------------------
return sdc.STUDENT.OrderByDescending(t => t.SNO).Select(s => new STUDENT{ SNO = s.SNO, SSEX = s.SSEX, SNAME = s.SNAME }).ToList();
------解决方案--------------------
或者return sdc.STUDENT.OrderByDescending(t => t.SNO).Select s).ToList();
------解决方案--------------------
up