=35orAge<10構(gòu)建表達(dá)式樹:(快速式)1.添加命名空間:usingSystem.Linq.Expressions;2.聲明參數(shù)表達(dá)式(比如Book實(shí)體)ParameterExpressionparam=Expression.Parameter(typeof(Book));3.Expressione" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

EF4.0、4.3創(chuàng)建表達(dá)式樹狀動(dòng)態(tài)查詢總結(jié)

系統(tǒng) 1618 0

---------------------------------------------快速適用

效果:

where name like '%王%' and Age>=35 or Age<10

構(gòu)建表達(dá)式樹:(快速式)

1.添加命名空間:

using System.Linq.Expressions;

2.聲明參數(shù)表達(dá)式(比如Book實(shí)體)

?ParameterExpression param = Expression.Parameter(typeof(Book));

3.

Expression exp = Expression.Constant(true);初始化表達(dá)式樹;

4.通過反射機(jī)制調(diào)用string.Contains,構(gòu)建like;

var methodinfo = typeof(string).GetMethod("Contains");

5.拼接

//Expression.And:表示 and 后面的條件當(dāng)然還有Or、 >=、<=、=等

//exp:and前面的語句,拼接之前的語句;

//Expression.Call():方法調(diào)用表達(dá)式;

//Expression.Property(param, "Name")字段或?qū)傩员磉_(dá)式

//methodinfo:調(diào)用上面Contains方法;

//Expression.Constant(s1):常量表達(dá)式;s1=“王”;

exp = Expression.And(exp, Expression.Call(Expression.Property(param, "Name"),methodinfo, Expression.Constant(s1)));

exp = Expression.And(exp, Expression.GreaterThanOrEqual(Expression.Property(param, "Id"),Expression.Constant(35)));

exp = Expression.Or(exp, Expression.LessThan(Expression.Property(param, "Id"), Expression.Constant(10)));

6.描述lambda表達(dá)式

var lam = Expression.Lambda<Func<Book, bool>>(exp, param);

7.調(diào)用

var lis = books.Where<Book>(lam).ToList();

?

------------------------------------------------------------詳細(xì)(轉(zhuǎn)述網(wǎng)友秦迷)

//---------------動(dòng)態(tài)創(chuàng)建表達(dá)式目錄樹---------------//

//名字模糊查詢tony

//年齡大于等于20

//年齡小于30

string uname = "tony";

List<Expression> expList = new List<Expression>(2);

ParameterExpression parExp = Expression.Parameter(typeof(UserInfo), "infos");//創(chuàng)建需要查找的參數(shù)

?

//查姓名infos.UserName.Contains("tony")

MemberExpression unameExp = Expression.Property(parExp, "UserName");

MethodInfo containsMethod = typeof(string).GetMethod("Contains");//using System.Reflection;指定實(shí)現(xiàn)Contains方法

ConstantExpression unamevalueExp = Expression.Constant(uname, typeof(string));

MethodCallExpression containsExp = Expression.Call(unameExp, containsMethod, unamevalueExp);

expList.Add(containsExp);

?

//查年齡infos.Age>=20

MemberExpression age1 = Expression.Property(parExp, "Age");

ConstantExpression agevalue1 = Expression.Constant(20, typeof(int));

BinaryExpression gteExp = Expression.GreaterThanOrEqual(age1, agevalue1);

expList.Add(gteExp);

//查年齡infos.Age<30

//if (1 > 2)

//{

MemberExpression age2 = Expression.Property(parExp, "Age");

ConstantExpression agevalue2 = Expression.Constant(30, typeof(int));

BinaryExpression ltExp = Expression.LessThan(age2, agevalue2);

expList.Add(ltExp);

//}

?

?

//把上面的表達(dá)式連接起來

Expression whereExp = null;

foreach (var item in expList)

??? {

??????? if (whereExp == null)

??????????????? {

??????????????????? whereExp = item;

??????????????? }

??????????????? else

??????????????? {

??????????????????? whereExp = Expression.And(whereExp, item);

??????????????????? /*

???????????????????? * 出錯(cuò)信息:

???????????????????? * 沒有為類型“System.Boolean”和“System.Boolean”定義二進(jìn)制運(yùn)算符 Add。

???????????????????? * 是And,開始我寫錯(cuò)成了Add一直找不到原因

??????????????????? ?*/

??????????????? }

??????????? }

//生成Lambda表達(dá)式

//Expression<Func<UserInfo, bool>> lambda = Expression.Lambda<Func<UserInfo, bool>>(whereExp, parExp);

LambdaExpression lambda = Expression.Lambda<Func<UserInfo, bool>>(whereExp, parExp);

Console.WriteLine(lambda);

/*

* 生成結(jié)果:

* infos => ((infos.UserName.Contains("tony") And (infos.Age>=20)) And (infos.Age<30))

*/

EF4.0、4.3創(chuàng)建表達(dá)式樹狀動(dòng)態(tài)查詢總結(jié)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天影视综合网色综合国产 | 国产91福利在线精品剧情尤物 | 国产综合成色在线视频 | 一级黄色在线 | 人人干人人看 | 欧美日韩在线看 | 色哦色哦哦色天天综合 | 日本免费黄色 | 韩日一区二区 | 亚洲AV成人天堂影院 | 日本在线播放一区二区 | 一区二区三区四区在线观看视频 | 色偷偷精品视频在线播放放 | 99热成人在线 | 奇米影视首页 | 婷婷97狠狠的狠狠的爱 | 久久久婷 | 国产一区二区三区不卡在线观看 | 91污网站 | 天天影院成人免费观看 | www.riben| 国产精品99久久 | 91精品国产综合久久福利软件 | 中文字幕不卡在线观看 | 欧美一区二区三区在线观看视频 | 一级毛片在线看在线播放 | 国产精品亚欧美一区二区三区 | 国产中文字幕一区 | 欧美综合自拍亚洲综合网 | 自偷自拍三级全三级视频 | 日本特黄的免费大片视频 | 日韩网红少妇无码视频香港 | 三级欧美日韩 | 在线观看国产 | 日韩精品在线播放 | 激情亚洲视频 | 五月天婷婷网亚洲综合在线 | 久久国产乱子伦精品免 | 日韩成人av在线播放 | 黄色影视免费看 | 精品亚洲一区二区三区 |