我们写一个Linq查询的时候一般是这样的,直接写在前台的DataContext db = new DataContext();var query = from d in db.Article
select new {ID=d.Id};
这里我只要查询一个id字段,上面代码生成的sql语句为:select id from Article
现在吧select 后面的部分写成一个变量,怎么写???返回类型是什么
方法成参数化public IEnumerable<T> GetList<T>(Func<Article,T> selector)
{
DataContext db = new DataContext();var query = from d in db.Article
select selector(d);
return query ;
}
这样虽然可以调用,也没有什么问题,但是生成的sql确是:select * from Article全部字段都查询出来,
后面试了下,只要select为变量的话,都是select全部字段的,有没有办法让select部分参数化,却查询的字段也不是全部的
select new {ID=d.Id};
这里我只要查询一个id字段,上面代码生成的sql语句为:select id from Article
现在吧select 后面的部分写成一个变量,怎么写???返回类型是什么
方法成参数化public IEnumerable<T> GetList<T>(Func<Article,T> selector)
{
DataContext db = new DataContext();var query = from d in db.Article
select selector(d);
return query ;
}
这样虽然可以调用,也没有什么问题,但是生成的sql确是:select * from Article全部字段都查询出来,
后面试了下,只要select为变量的话,都是select全部字段的,有没有办法让select部分参数化,却查询的字段也不是全部的
1. 你可以利用LINQ的延迟查询特性,在查询的基础上再查询 返回自己想要的结果
public IEnumerable<T> GetList<T>(Func<Article,T> selector)
{
DataContext db = new DataContext();var query = from d in db.Article
select selector(d);
return query ;
}
var query=...;
var result= from r in query
select r.ID;
2.动态创建表达式树
http://www.cnblogs.com/snowdream/archive/2008/07/18/1246308.html
除非select 后面写死他
select d.Id;
return query ;
IEnumerable<T> 这个是枚举对象,也就是说,返回后他已经生成了sql只是还没有去查询而已
应该返回IQueryable<T>,这个跟上面的有什么区别呢,query返回的是一个表达式树,只有你调用foreach或者ToList等方法时才会生成sql并查询,只有就可以达到我要去的效果,上面的方法已经测试了,确实是可以的