linq返回匿名类型的有关问题

linq返回匿名类型的问题
本帖最后由 q107770540 于 2015-04-02 14:23:00 编辑
刚接触linq,比如下面的查询:
var select = from p in ctx.mm_ProductClass 
                                                where p.Depth == 0 
                                                orderby p.RootID, p.OrderID 
                                                select new { p.ClassID, p.ClassName };


select 多列的时候,返回的是匿名类型,这个匿名类型无法转换为IEnumerable,如果想转换为IEnumerable,只能查询所有列,如:

var select = from p in ctx.mm_ProductClass
 where p.Depth == 0 orderby p.RootID, p.OrderID 
  select p;
        IEnumerable<mm_ProductClass> query = select.ToList();

但是这样的查询,从数据库角度来说应该是不合理的,很多时候只需要检索其中的个别字段,但是检索个别字段的时候,如何确定他的返回类型呢,因为它本身是一个匿名类型。

见过类似如下的写法,select new 返回一个类,这种又是怎么用的呢,还要单独写一个类,并且实现IEnumerable接口吗?

var select = from p in ctx.mm_ProductClass
 where p.Depth == 0 orderby p.RootID, p.OrderID
 select new 这里返回一个类,但好象要实现IEnumerable接口 { p.ClassID, p.ClassName };

------解决思路----------------------
var q= from p in ctx.mm_ProductClass 
                                                where p.Depth == 0 
                                                orderby p.RootID, p.OrderID 
                                                select new  mm_ProductClass{ClassID= p.ClassID, ClassName =p.ClassName };
var result= q.ToList();

------解决思路----------------------
linq返回匿名类型的有关问题
匿名对象是框架自动帮你定义了一个类,new 这里返回一个类这种是用你自己定义的类来接收
不管匿名还是自定义类,都跟IEnumerable没有任何关系,返回的结果才跟IEnumerable有关系,返回的是一个集合