好久才更新一篇新的东西 这次项目做的很崩溃 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也用不了
要是有什么别的好办法 一定要告诉我啊