linq to sql 动态查询

shdxiang 2010-11-22 02:57:18

public static List<T> QueryGenericObject<T>(IEnumerable<T> source, bool condition)
{
var query = from stu in source
where condition
select stu;
return query.ToList();
}
DemoLinq.Linq.StudentData stdata = new DemoLinq.Linq.StudentData();
bool str = (stdata.Sid == 1) ? true : false;
List<DemoLinq.Linq.StudentData> query = LinqSqlHelper.QueryGenericObject<DemoLinq.Linq.StudentData>(stuContent.StudentData,str);
我想根据具体需要 来改变条件 ,把他弄成一个比较通用的方法,显然 我的写法是不行的

...全文
132 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
claymore1114 2010-11-23
  • 打赏
  • 举报
回复
jianshao810 2010-11-23
  • 打赏
  • 举报
回复
用表达式树,另外有一个人家写好的 dll。到网上查下
jeven_xiao 2010-11-23
  • 打赏
  • 举报
回复
友情支持一下·~
bloodish 2010-11-23
  • 打赏
  • 举报
回复
请参考4#链接,建议使用Dynamic LINQ,虽然语法上晦涩一点,相对成熟一些.

hztltgg 2010-11-23
  • 打赏
  • 举报
回复
就是where需要一个返回逻辑值的方法,以前的做法就是定义一个委托,然后传递给这个参数,后来有匿名委托,可以直接在用的地方定义这个方法了,现在有Lambda,定义委托的语法就更简单了

source.Where(c => c.Sid == 1 );

这个括号里的就是一个lambda表达式,c能自动推断出类型,就是你传递给他的source的那个T类型,=>左边的就是函数的参数,右边的就是函数体,相当于
bool fun(c){ return c.Sid==1;}

不过利用linq就是为了强类型的写这些查询表达式,如果是动态查询,那这些优势又消失殆尽了,上面的网址有个linq的动态查询库,不过这个等于是又回到拼接查询字符串来实现上了。



顺便说一下,你这儿 bool str = (stdata.Sid == 1) ? true : false; 没必要用三目运算符啊,直接
bool str = (stdata.Sid == 1)效果不是一样么?stdata.Sid == 1返回的就是真,没必要用?运算符了





shdxiang 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hztltgg 的回复:]
你这儿吧
bool str = (stdata.Sid == 1) ? true : false;
改成一个函数,匿名函数就行
(s stdata)=>s.Sid==1
然后传递给condition这个参数就行,当然这个参数的类型要修改成一个委托


var query = from stu in source.where(condition)
select stu;
……
[/Quote]
这个匿名函数 咋写的啊 还没有写过
hztltgg 2010-11-22
  • 打赏
  • 举报
回复
你这儿吧
bool str = (stdata.Sid == 1) ? true : false;
改成一个函数,匿名函数就行
(s stdata)=>s.Sid==1
然后传递给condition这个参数就行,当然这个参数的类型要修改成一个委托


var query = from stu in source.where(condition)
select stu;
return query.ToList();
就可以了,不过这样是比较简单的情况,关键还是如何动态构建查询表达式,这个就没有一个字符串来的简单
phil999 2010-11-22
  • 打赏
  • 举报
回复
把这个弄通用了,和直接写 from stu in source where condition select stu 有什么区别?少写几行?楼主要的是一个基础设施,还是服务于业务的查询?
shdxiang 2010-11-22
  • 打赏
  • 举报
回复

项目 要求必须用 烦躁
机器人 2010-11-22
  • 打赏
  • 举报
回复
看看Linq的Dynamic.cs类
hztltgg 2010-11-22
  • 打赏
  • 举报
回复
有表达式树一说,,不过真不如拼接sql来的方便,用linq还是别想着通用了,因为linq就是强类型的查询,偏用在通用查询这种弱类型的地方,麻烦。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧