EF中c expression func<Func<T,bool>gt;动态查询怎么写

> LinqtoSQL中的一个问题,有关Expression<Func<XX,bool&g
LinqtoSQL中的一个问题,有关Expression<Func<XX,bool&g
louzhengjun & &
发布时间: & &
浏览:41 & &
回复:3 & &
悬赏:0.0希赛币
Linq to SQL中的一个问题,有关Expression&Func&XX, bool$>$和Func&XX, bool&Hi,这是我的两段代码:  C# code   ScDataContext db = new ScDataContext(); db.Log = Console.O
Expression&Func&TrainingType, bool$>$ predicate = p =& p.Id == 1;
TrainingType type = db.TrainingTypes.FirstOrDefault(predicate);
这样,生成的SQL语句就会是:Select .... From .... Where ... id = 1 ...而如果不是向FirstOrDefault中传递表达式树,而是传入一个Func委托:  C# code   Func&TrainingType, bool& predicate = p =& p.Id == 1; TrainingType type = db.TrainingTypes.FirstOrDefault(predicate);
那生成的SQL中就不会有Where子句。这是什么原因呢?
其实归根结底是两个接口的区别 你可以查一下
09:27:48 & &
& & (0)(0)参考
love_66 & &
09:27:48 & &
& & (0)(0)ms-help://MS.MSDNQTR.v90.chs/fxref_system.core/html/4c9e45f9--7b25-3b7a.htmIQueryable&(Of &(T&)&)..::.FirstOrDefault 方法FirstOrDefault(Func&(Of &(UTP, Boolean&)&)) 返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值。 (由 Enumerable 定义。)& 已经查出所有记录,然后应用FuncFirstOrDefault(Expression&(Of &(Func&(Of &(UMP, Boolean&)&)&)&)) 返回序列中满足指定条件的第一个元素,如果未找到这样的元素,则返回默认值。 (由 Queryable 定义。)& 将表达式直接应用到SQL中.他们是两种实现.love_ai88 & &
09:27:48 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&由于项目中经常要用到类似db.students.where多条件查询,因此需要拼接查询条件。
网上搜索大部分出自&&
using System.L
using System.Linq.E
using System.Collections.G
public static class PredicateBuilder
public static Expression&Func&T, bool&& True&T& ()
{ return f =&
public static Expression&Func&T, bool&& False&T& () { return f =& }
public static Expression&Func&T, bool&& Or&T& (this Expression&Func&T, bool&& expr1,
Expression&Func&T, bool&& expr2)
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast&Expression& ());
return Expression.Lambda&Func&T, bool&&
(Expression.OrElse (expr1.Body, invokedExpr), expr1.Parameters);
public static Expression&Func&T, bool&& And&T& (this Expression&Func&T, bool&& expr1,
Expression&Func&T, bool&& expr2)
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast&Expression& ());
return Expression.Lambda&Func&T, bool&&
(Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
使用代码如下:
var predicate = PredicateBuilder.True&Gift&();
predicate = predicate.And(w =& w.DataState == DataStateEnum.正常);
List&Gift& list = db.Gifts.Where(predicate);
但出现异常:LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”
网上继续搜索,其中一种如下:
List&Gift& list = db.Gifts.pile());作者文中提到“他在Linq to sql 上运行正常”,没有验证,
这样确实可以正常工作,但pile()后就变成了Func&T, bool&类型,
使用&Entity Framework 最要小心的性能杀手就是 —— 不正确的查询代码造成的数据库全表查询。
“将Func类型的变量作为参数传给Where方法进行LINQ查询时,Enitity Framework会产生全表查询,将整个数据库表中的数据加载到内存,然后在内存中根据Where中的条件进一步查询。” &经SQL
Server Profiler监测确实如此。
继续找解决办法,找到个
有人回答://Starting from .net 4.0. There is the ExpressionVistor class which allows you to build expressions that are EF safe.
public static Expression&Func&T, bool&& AndAlso&T&(
this Expression&Func&T, bool&& expr1,
Expression&Func&T, bool&& expr2)
var parameter = Expression.Parameter(typeof (T));
var leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter);
var left = leftVisitor.Visit(expr1.Body);
var rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter);
var right = rightVisitor.Visit(expr2.Body);
return Expression.Lambda&Func&T, bool&&(
Expression.AndAlso(left, right), parameter);
private class ReplaceExpressionVisitor
: ExpressionVisitor
private readonly Expression _oldV
private readonly Expression _newV
public ReplaceExpressionVisitor(Expression oldValue, Expression newValue)
_oldValue = oldV
_newValue = newV
public override Expression Visit(Expression node)
if (node == _oldValue)
return _newV
return base.Visit(node);
}经测试解决问题
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12913次
排名:千里之外
原创:28篇
转载:25篇
(1)(2)(1)(1)(2)(2)(9)(2)(1)(4)(4)(4)(1)(1)(4)(1)(1)(4)(2)(6)EF中Expression&Func&T,bool&动态查询怎么写_百度知道
EF中Expression&Func&T,bool&动态查询怎么写
我有更好的答案
愈深愈无声!  那一刻.  我是想微笑的,我明白什么叫做幸福,我真的看到一株嫩绿的幼苗在风中冲我微笑!  只是,并不可能发芽,他并不知道,那粒种子是从煮熟的玉米上掰下来的  那一刻,彻底地哭了,我明白原来自己并不孤寂,我跟在他身后.天地间每一个角落都传递着幸福的信息,懒懒地挪动着脚步,我明白原来自己并不孤寂.  那一刻,我哭了,它让我拉我出门.望着身边的爸爸,可我的眼眶终于没有囚住沸腾的泪水.站定后!  真正的幸福正如此
其他类似问题
为您推荐:
bool的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁欧洲老虎机娱乐城-欧洲老虎机娱乐城*>>>滚球红利送不停
 > 
欧洲老虎机娱乐城:EF中Expression&Func&T,bool&动态查询怎么写
来源:环球网
欧洲老虎机娱乐城
�交通电缆方面具有良好的品牌,同时积极拓展新能源产业链,通过自主研发的方式获取电动汽车充电电缆相关技术,子公司广州南洋新能源有限公司谋求通过开放、投资等方式,进入新能源项目、电动汽车充电设施、智能电网等领域。   参军:民营企业参与军工领域建设大势所趋,重点推荐上海佳豪、新研股份。   工程机械:转型和&ldquo&#59;走出去&rdquo&#59;是传统龙头走出困境的发展途径,高端细分领域受益人力成本上代,推荐胜利股份、厚普股份。   节能环保设备:节能环保对经济持续发展影响深远,战略地位在十三五期间将再次提升。看好细分领域具有技术壁垒的公司,推荐科达洁能、龙马环卫。   民轻人中口碑相传,会主动联想、消费并反复回购的的企业品牌。最后,借助新媒体平台,加强与用户的互动营销把握着一个企业的生存命脉,一个成功的企业必定有过人的市场营销,�
实行“一案双查”,对问题反映突出而没有及时查处的,在追究直接责任人责任的同时,还要追究主体责任、监督责任。要定期曝光违纪问题,强化警示震慑氛围,持续保持遏制基层不正之风和腐败问题的高压态势。&nbsp&#59; &nbsp&#59;��衣柜企业要么抓住机遇转型成平台化企业,要么转变为专业化企业,否则将会面临被未来市场淘汰的危险。&nbsp&#59; &nbsp&#59; &nbsp&#59;   在记者的采访中,关于证卫中心负责人介绍,这名被撞环卫工人名叫罗惠萍,从事环卫工作十几年。事故发生后,经入院抢救治疗无效,于当天上午8时许去世。  该负责人告诉记者,罗惠萍的丈夫是一名出租车司机,家里还有两个孩子�
��北街惠北巷交会处,找到了处于停工状态的绿地凤凰城三期云凤花苑住宅项目工地,现场渣土覆盖率超过90%。记者注意到南侧出口大门紧闭,没有喷淋设施,北侧出口开放,有喷淋设施,两个出口均没有车辆出入成,无人机经营暂行办法制定【行业研究】   2016-08-16 15:23:30   【研究报告内容摘要】   报告要点   机械行业整体观点:15年下半年我们看好三大投资主线:需求重估(高列车广播也赶到现场,并初步诊断该旅客为突发性癫痫病。“来,咱们把他搀扶到稍微宽敞一点的地方休息吧。”王医生话音未落,几名列车工作人员急忙上前搀扶起患病旅客,其他旅客也纷纷让自封,要以改变人们的生活方式和人们的生活状态为立脚点,通过设计改变用途,改变生活方式,与家装、建材行业企业实现跨界合作,打开通路,成为市场的主导。不过,&ldquo&#59;跨界&rdquo&#59;并没有想象中
一切没有利润的整合都是扯淡的。&nbsp&#59; &nbsp&#59; &nbsp&#59;   8月12日,记者对中央第八环境保护督察组交办群众举报环境污染问题整改情况,进行了第十四次走访。  【问题一】有市民反映:金凤区福州街惠北巷绿地凤凰平台化&rdquo&#59;的一般都是具备一定实力的企业,即使企业在某一方实力不足,比如说要为客户提供个性化的服务,而自己却没有能力完全由自己完成这种服务,也可以通过联合行业资源来、实验室检测、检疫处理、电子闸口、疫情上报等目前在用的多个子系统功能,实现全国数据大集中,对推动进出口货物&ldquo&#59;快检快放&rdquo&#59;更上新台阶。石材养护行业现状 如何延生新产品?  这可能是在十年前,用石材很疑惑的问
大家感受一下: 老虎机游戏qq群:哪里有struts2-spring-plugin-2.0.11.1.jar
 老虎机游戏qq群:哪里有struts2-spring-plugin-2.0.11.1.jar
关键词:老虎机游戏qq群
 老虎机游戏qq群:哪里有struts2-spring-plugin-2.0.11.1.jar
合作媒体推荐
看过本文的人还看过

我要回帖

更多关于 func get args 的文章

 

随机推荐