在Linq To EF中,如何用委托动态生成查询条件?

问题描述

代码如下,问题是如何动态返回:Expression<Func<Web_Base_News_Info,bool>>expression?有其它更好的办法也可以,谢谢。publicvoidTest(ContextExtctx,Params.FieldExtRepeaterfieldExt){//1.封装容器varft=newFieldTest<Web_Base_News_Info>();//封装key对应的变量ft._dictKey.Add(EnumsKV.FieldKeyValues.PkId,p=>p.PkId);ft._dictKey.Add(EnumsKV.FieldKeyValues.FlagStatus,p=>p.flagStatus??0);ft._dictKey.Add(EnumsKV.FieldKeyValues.FlagView,p=>p.flagView??0);ft._dictKey.Add(EnumsKV.FieldKeyValues.FlagPass,p=>p.flagPass??0);//2.封装method对应的变量ft._dictMethod.Add(EnumsKV.FieldMethodValues.Equal,(p,q)=>p==q);ft._dictMethod.Add(EnumsKV.FieldMethodValues.Great,(p,q)=>p>q);ft._dictMethod.Add(EnumsKV.FieldMethodValues.Less,(p,q)=>p<q);ft._dictMethod.Add(EnumsKV.FieldMethodValues.NotEqual,(p,q)=>p!=q);ft._dictMethod.Add(EnumsKV.FieldMethodValues.NotGreat,(p,q)=>p<=q);ft._dictMethod.Add(EnumsKV.FieldMethodValues.NotLess,(p,q)=>p>=q);//3.动态生成查询条件Expression<Func<Web_Base_News_Info,bool>>whereOr=PredicateBuilder.False<Web_Base_News_Info>();var查询条件=whereOr;查询条件=查询条件.Or(w=>w.flagStatus==3);//示例:固定查询条件,下面的动态生成条件类似于这个foreach(varifvsinfieldExt.FieldWhereOr)//要求:动态查询条件{varifv=ifvsasIntItem;Expression<Func<Web_Base_News_Info,bool>>expression=ft.这里如何返回正确的Expression呢(ifv.Key,ifv.Method,ifv.Value);查询条件=查询条件.Or(expression);}var结果二=ctx.Web_Base_News_Info.AsQueryable().Where(查询条件);Response.Write("::B.有"+结果二.Count()+"个【得0个,实际是5个】::<br/>rn");}publicclassFieldTest<T>{publicDictionary<EnumsKV.FieldKeyValues,Func<T,int>>_dictKey=newDictionary<EnumsKV.FieldKeyValues,Func<T,int>>();publicDictionary<EnumsKV.FieldMethodValues,Func<int,int,bool>>_dictMethod=newDictionary<EnumsKV.FieldMethodValues,Func<int,int,bool>>();publicExpression<Func<T,bool>>这里如何返回正确的Expression呢(EnumsKV.FieldKeyValueskey,EnumsKV.FieldMethodValuesmethod,intvalue){Func<T,int>func1=_dictKey[key];Func<int,int,bool>func2=_dictMethod[method];Expression<Func<T,bool>>exp=p=>func2(func1(p),value);returnexp;}}publicenumFieldKeyValues//枚举字段名称{PkId=1,flagStatus=2,flagView=4,flagPass=8,}publicenumFieldMethodValues{///<summary>///Int32、Float、DataTime///</summary>[Description("大于")]Great,[Description("不大于")]NotGreat,[Description("小于")]Less,[Description("不小于")]NotLess,[Description("等于")]Equal,[Description("不等于")]NotEqual,}

解决方案

解决方案二:
EF有个库叫DynamicLINQ你看看如果它能够满足你的条件,你就不用自己开发了。
解决方案三:

解决方案四:
不行啊,我要的是,通过委托,动态的生成,而且是在未知条件的情况下,楼上两位朋友列的都是已知条件的例子。
解决方案五:
publicclassTT{publicintid{get;set;}}publicstaticvoidMain(){//动态构建下面这个表达式树Expression<Func<TT,bool>>ddd=x=>x.id==0;varentitytype=Expression.Parameter(typeof(TT),"x");varproperty=typeof(TT).GetProperty("id");varkey=Expression.MakeMemberAccess(entitytype,property);varvalue=Expression.Constant(0);varterm=BinaryExpression.Equal(key,value);varlambda=Expression.Lambda(term,entitytype);varfunc=lambda.Compile();TTtestobject=newTT(){id=0};objectresult1=func.DynamicInvoke(testobject);objectresult2=ddd.Compile().DynamicInvoke(testobject);Console.WriteLine(result1);Console.WriteLine(result2);}

这样就可以动态构建Expression<Func<T,bool>>了。。我看了下1楼发的DynamicLINQ。我也是看了才知道有这东西。我觉得这东西挺好,可以满足你
解决方案六:
什么未知情况,写个泛型方法应该可以解决
解决方案七:
dlinq允许你拼接字符串得到linq查询或者你可以自己解析,然后构造表达式树来做。
解决方案八:
你要返回Expression<Func<T,bool>>,那么前提,你的未知条件也必然要有一种表达方式。由于你要返回的就是lambda表达式,所以你传入的东西,要么是类似于拼接的string,要么就是一种自己定义的条件表达式类型。不论是哪种,都建议你直接拼接成ESQL直接给Linq2EF执行更为方便。如果执意要Expression<Func<T,bool>>的话,找微软直接提供代码的动态构建lambda表达式的类库System.Linq.Dynamic.DynamicQueryable可以基本满足你的要求,只需要些许处理。它返回的是LambdaExpression,是Expression<>的基类,你可以构建一个永真Expression<>再调用Update方法将动态构建的lambda表达式的逻辑加入,最后就可以得到你要的Expression<Func<T,bool>>了

时间: 2025-01-26 23:29:51

在Linq To EF中,如何用委托动态生成查询条件?的相关文章

在sharepoint2013中如何用正则表达式实现模糊查询文档或图片?语言是C#

问题描述 在sharepoint2013中如何用正则表达式实现模糊查询文档或图片?语言是C# 比如***.jpg或者***.word,要使搜索一个字或者两个字的时候就能查询,类似于这种一句话的表达式(?^|[^#]*[s])#(([[](?[^..,.agname>[^...请大家帮帮忙,本人没有接触过编程不懂,要是能解决此类难题,我会非常感激的,谢谢.

LINQ to SQL运行时动态构建查询条件

在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语 句更麻烦一些.本文介绍了3种运行时动态构建查询条件的方法.本文中的例子最终实现的都是同一个功 能,从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项.keywords是 个字符串数组,该数组长度在编译时是不确定的.思路及方法说明写在代码注释中. 1.表达式树 1 public static IEnumerable<Customers>

mongodb的java开发中使用两个字段相等查询条件应该怎么写?

问题描述 mongodb的java开发中使用两个字段相等查询条件应该怎么写? 也就是类似sql中的where 字段A=字段B这样的条件,我查了下网上有些帖子中写的用$where的方式我查询的时候会出错,类似于:new Document("$where",new Document("字段A", "字段B")),驱动版本是3.0 在网上查到一个帖子:http://cache.baiducontent.com/c?m=9d78d513d99c1cf30

在LINQ to SQL中使用Translate方法以及修改查询用SQL

目前LINQ to SQL的资料不多--老赵的意思是,目前能找到的资 料都难以摆脱"官方用法"的"阴影".LINQ to SQL最 权威的资料自然是MSDN,但是MSDN中的文档说明和实例总是显得"大开大 阖",依旧有清晰的"官方"烙印--这简直是一 定的.不过从按照过往的经验,在某些时候如果不按照微软划定的道道来走,可 能就会发现别样的风景.老赵在最近的项目中使用了LINQ to SQL作为数据层的基础,在LINQ to S

asp.net中js文本框动态生成,输入数据并能添加到数据库中?

问题描述 如题 解决方案 解决方案二:动态生成文本框.用js输出html代码嘛.输入数据插入到数据库用ajax提交解决方案三:该回复于2012-02-10 14:40:46被版主删除解决方案四:<htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/

c# 根据excel中的源数据 生成查询条件 结果集

问题描述 在excel的一个sheet表中已经提供了一批源数据,我想做一个程序,通过向程序中导入源数据可以在另一个sheet表中生成如图的查询条件和结果集,,,当选择查询条件的时候,结果集会发生改变,而且可以根据这些结果动态生成柱状.折线.饼状图,查询条件.结果集.统计图都在一个sheet表中,哪位大虾有相关的资料啊,希望指点小弟一二. 解决方案 解决方案二:图表方面,把公式都设好,数据变化,图表自然会跟着变解决方案三:c#操作excel时怎么在单元格中实现条件查询呢?也是通过公式吗?解决方案四

求助:VB2008中如何用AxADODC和DataGridView查询数据??

问题描述 各位大神:小弟之前用VB6.0,从数据库中查询数据一直都是用下面的语句:Adodc1.CommandType=adCmdTextAdodc1.RecordSource=SQLCodeAdodc1.RefreshSetDataGrid1.DataSource=Adodc1请问在VB2008中类似的语句怎么写?怎么用用AxADODC和DataGridView查询数据??AxAdodc1.CommandType=MSAdodcLib.CommandTypeEnum.adCmdTextAxAd

Mule中如何用表达式动态配置服务提供端的地址

问题描述 求大大关注!动态配置服务提供端的地址 解决方案 解决方案二:你个大豆或!!!!解决方案三:你个大豆或!!!!解决方案四:这个问题我也不知道,答案满意吗?

asp中如何用word模板生成pdf文件

问题描述 asp.net,用word模板生成pdf文件,求源码或者例子 解决方案 解决方案二:有人知道吗??解决方案三:平台是VS2003,framework1.0的解决方案四:ASPOSE.WORDS组件.不过起码是2.0的解决方案五:引用3楼wjq的回复: ASPOSE.WORDS组件.不过起码是2.0的 是的,所以正苦恼着,升级系统平台更是麻烦的事,问问还有没有其他办法呢解决方案六:http://npoi.codeplex.com/解决方案七:引用5楼wuwanchunIT的回复: htt