关于LinkQ的动态查询

chongzi1 2008-05-12 11:45:04
用Sql语句的时候可以组合动态查询字符串,看了网上的一些文章用LinQ的时候,可以动态组合Lamda表达式,我写了一个方法
public static Expression<Func<TEntity, bool>> getExpression<TEntity>(this string fieldName, string fieldValue, CompareOperate operate) where TEntity : class
{
ParameterExpression param = Expression.Parameter(typeof(TEntity), "c");
Expression left = Expression.Property(param, typeof(TEntity).GetProperty(fieldName));
Expression right = Expression.Constant(fieldValue);

Expression filter = null;
switch (operate)
{
case CompareOperate.Equal:
filter = Expression.Equal(left, right);
break;
case CompareOperate.GreaterThan:
filter = Expression.GreaterThan(left, right);
break;
case CompareOperate.LessThan:
filter = Expression.LessThan(left, right);
break;
case CompareOperate.LessThanOrEqual:
filter = Expression.LessThanOrEqual(left, right);
break;
case CompareOperate.GreaterThanOrEqual:
filter = Expression.GreaterThanOrEqual(left, right);
break;
case CompareOperate.NotEqual:
filter = Expression.NotEqual(left, right);
break;
default:
filter = Expression.Equal(left, right);
break;
}
Expression<Func<TEntity, bool>> pred = Expression.Lambda<Func<TEntity, bool>>(filter, param);
return pred;
}
但是其中还有一些情况没有包括,像Like的这种情况,不知道各位在动态查询这块是怎么处理的,大家一起探讨一下,顶者有分
...全文
1147 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcz830126 2008-07-03
  • 打赏
  • 举报
回复
老外发布的LINQ示例中,不就写了个类帮助你动态写查询语句的吗?
其实可以直接用他那个类的,据说是微软的大牛写的,可以看看!
可以用Lamda写,但我感觉不是太好!
yezie 2008-05-14
  • 打赏
  • 举报
回复
我喜欢用Lamda。不知道你写这段是什么用。
like:在Lamda里直接用 db.table1.Where(a => a.field1.IndexOf("asd") > -1)

关于动态:
var aa = db.table1.Where(a => a.field1.IndexOf("asd") > -1);
if(true)
aa = aa.Where(a => a.field2 == "qq")
else
aa = aa.Where(a => a.field2 == "ww")
当然if里的左边aa可以用别的变量,如果你数据类型变了
tinalucky 2008-05-12
  • 打赏
  • 举报
回复
apollolb2005 2008-05-12
  • 打赏
  • 举报
回复
sf
Ivony 2008-05-12
  • 打赏
  • 举报
回复
Like是方法调用。
xieyongbao 2008-05-12
  • 打赏
  • 举报
回复
顶下

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧