LinQ之崩溃的动态like

好久才更新一篇新的东西 这次项目做的很崩溃 LinQ从来没用过

简单的查询没有什么问题 关键是不能将SQL定义成字符串进行拼凑

问题来了

有6个条件 若其中一个不为空则作为条件 每个条件之间Or的关系

在网上查到有用LINQ开发团队提供的“动态查询库(Dynamic Query Library)”

但这需要引入文件 工程不是自己的 说的不算啊

只有别的办法了

具体实现

 

先进行表的查询

var query = from tableT in table

                   where

                   (条件)

                   select new XXBE()

                   {

                     m_Table = tableT

                   };

 

有多少需要组合的就定义多少

Expression<Func<XXBE, bool>> lambdaTrue = r => true;

Expression<Func<XXBE, bool>> lambda1;

Expression<Func<XXBE, bool>> lambda2;

.

.

.

 

if (!CheckUtil.isEmpty(strCondition1))
{
    lambda1 = r => r.tableT.Name1.Contains(strCondition1);
    var invokedExpr = Expression.Invoke(lambdaTrue, lambda1 .Parameters.Cast<Expression>());

    lambdaTrue = Expression.Lambda<Func<XXBE, bool>>(Expression.And(lambda1 .Body, invokedExpr ),
        lambda1 .Parameters);
    isHaveFlag = true;
}

 

if (!CheckUtil.isEmpty(strCondition2))
{
    lambda2 = r => r.YoyakuKihonInfo.RSVI_RSVERF.Contains(strCondition2);

    var invokedExpr = Expression.Invoke(lambdaTrue, lambda2 .Parameters.Cast<Expression>());

    if (isHaveFlag)
    {
        lambdaTrue = Expression.Lambda<Func<XXBE, bool>>(Expression.Or(lambda2 .Body, invokedExpr),
        lambda2 .Parameters);
    }
    else
    {
        lambdaTrue = Expression.Lambda<Func<XXBE, bool>>(Expression.And(lambda2 .Body, invokedExpr),
        lambda2 .Parameters);
    }

    isHaveFlag = true;
}

 

.

.

.

 

最后检索

query = query.Where(lambdaTrue);

 

实在是被逼无奈啊 如果6个条件组合判断得有多少种场合啊 还得往BE里扔数据 貌似Dynamic也用不了

要是有什么别的好办法 一定要告诉我啊

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值