怎么用lambda表达式作为参数传递

qq_32395957 2015-11-09 04:33:21

//分页
public static List<T> GetPageList<T, TKey>(Func<T, bool> where, Func<T, TKey> order, int pageIndex, int pageSize, out int Total)
where T : class
{
MyCrmContext db = new MyCrmContext();
Total = db.Set<T>().Where(where).Count();
var list = db.Set<T>().Where(where).OrderBy<T, TKey>(order).Skip((pageIndex - 1) * pageSize).Take(pageSize);
return list.ToList();
}

//调用
this.rptList.DataSource = GetPageList<Model.sys_user, object>(u=u.id>0, u => u.add_time, page, pageSize, out totalCount);
this.rptList.DataBind();



那么问题来了,条件那边是动态的,比如搜索关键词,这个时候就要判断关键词是否为空,如果是不用EF就像下面这样


protected string CombSqlTxt(string _keywords)
{
StringBuilder strTemp = new StringBuilder();
_keywords = _keywords.Replace("'", "");
if (!string.IsNullOrEmpty(_keywords))
{
strTemp.Append(" and (user_name like '%" + _keywords + "%' ");
}

return strTemp.ToString();
}


然后将返回的结果作为参数传递,那么如果是EF下,我封装这个组合条件函数应该是什么类型的呢,并且如何传递?
...全文
1180 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_24578157 2016-03-04
  • 打赏
  • 举报
回复
Expression<Func<Model.sys_user, bool>> func = u => true; func = u => u.role_type >= 1;//这个条件会被下面的覆盖掉,即生成的SQL没有role_type的判断,应该怎么写才会两个条件同时起作用 if (!string.IsNullOrEmpty(this.keywords)) { func &&= i => i.user_name.Contains(this.keywords) ; }
qq_32395957 2015-11-11
  • 打赏
  • 举报
回复

           Expression<Func<Model.sys_user, bool>> func = u => true;
            func = u => u.role_type >= 1;//这个条件会被下面的覆盖掉,即生成的SQL没有role_type的判断,应该怎么写才会两个条件同时起作用
            if (!string.IsNullOrEmpty(this.keywords))
            {
                func = i => i.user_name.Contains(this.keywords) ;
            }
qq_32395957 2015-11-11
  • 打赏
  • 举报
回复

Expression<Func<Model.sys_user, bool>> func = u => u.role_type >= 1;
            if (!string.IsNullOrEmpty(this.keywords))
            {
                func = i => i.user_name.Contains(this.keywords) ;
            }
            this.rptList.DataSource = EntityHelper.GetPageList<Model.sys_user, object>(func, u => u.add_time, page, pageSize, out totalCount);
            this.rptList.DataBind();
报错:Unable to cast the type 'System.DateTime' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
回.到.未来 2015-11-09
  • 打赏
  • 举报
回复

Func<sys_user, bool> filter=m=>m.user_name=="keyword";
qq_32395957 2015-11-09
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
你的T类型啊……
刚接触EF,对这种写法还不太了解,这种写法叫什么,我去百度学习一下
  • 打赏
  • 举报
回复
你的T类型啊……
qq_32395957 2015-11-09
  • 打赏
  • 举报
回复
引用 3 楼 starfd 的回复:
Func<int, bool> func = (i) => true;
if (true)
{
    func = i => func(i) && true;
}
给你参考例子

Func<Model.sys_user, bool> func = (i) => true;
            if (!string.IsNullOrEmpty(this.keywords))
            {
                func = i => func(i) && i.user_name.Contains(this.keywords) ;
            }
这样写吗?func(i) 代表什么
  • 打赏
  • 举报
回复
Func<int, bool> func = (i) => true;
if (true)
{
    func = i => func(i) && true;
}
给你参考例子
qq_32395957 2015-11-09
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
直接在前端组织好集合不就行了
怎么说?
  • 打赏
  • 举报
回复
直接在前端组织好集合不就行了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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