linq返回匿名类型的有关问题
linq返回匿名类型的问题
刚接触linq,比如下面的查询:
select 多列的时候,返回的是匿名类型,这个匿名类型无法转换为IEnumerable,如果想转换为IEnumerable,只能查询所有列,如:
但是这样的查询,从数据库角度来说应该是不合理的,很多时候只需要检索其中的个别字段,但是检索个别字段的时候,如何确定他的返回类型呢,因为它本身是一个匿名类型。
见过类似如下的写法,select new 返回一个类,这种又是怎么用的呢,还要单独写一个类,并且实现IEnumerable接口吗?
------解决思路----------------------
------解决思路----------------------
匿名对象是框架自动帮你定义了一个类,new 这里返回一个类这种是用你自己定义的类来接收
不管匿名还是自定义类,都跟IEnumerable没有任何关系,返回的结果才跟IEnumerable有关系,返回的是一个集合
刚接触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();
------解决思路----------------------
匿名对象是框架自动帮你定义了一个类,new 这里返回一个类这种是用你自己定义的类来接收
不管匿名还是自定义类,都跟IEnumerable没有任何关系,返回的结果才跟IEnumerable有关系,返回的是一个集合