你的位置:首页 > ASP.net教程

[ASP.net教程]Lambda Expressions表达式使用


很多时候我们在使用Lambda表达式查询时,比如使用Lambda表达式查询用户数据,有时候会用电话或邮箱去查询用户信息,有时候又会用户名去查询用户信息

  var user = db.Set<U_User>().Where(c => c.UserName = "nee32");  var user = db.Set<U_User>().Where(c => c.TelePhone = "13888888888");

其实查询的结果都一样,但唯一的区别就是Lambda表达式中的条件不一样,那么能不能只写一个查询方法,而实现Lambda表达式中Where的有查询条件呢?答案当然是 能!例如在三层架构中使用一个方法满足使用多个条件查询,代码如下

  public class UserDAL  {    /// <summary>    /// 根据条件查找用户列表    /// </summary>    /// <param name="where"></param>    /// <returns></returns>    public List<U_User> FindAll(System.Linq.Expressions.Func<U_User, bool>> where = null)    {      using (EFContext db = new EFContext())      {        if (where == null)          return db.U_User.ToList();        else          return db.U_User.Where(where).ToList();      }    }  }

声明了一个FindAll方法,参数是可空的Lambda表达式(Expression<Func<U_User, bool>>表示一个Lambda表达式)

其中Func<U_User, bool>使用泛型委托 传入U_User,返回一个bool值

方法调用

    public ActionResult Index()    {      //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32");      //List<U_User> userList = userBLL.FindAll(c => c.UserName == "nee32" && c.Status == 1);      List<U_User> userList = userBLL.FindAll();      return View();    }

使用Expression表达式分页,注意 Linq分页之前必须先排序 分页代码如下

  /// <typeparam name="TKey">排序的字段类型</typeparam>  /// <param name="pageIndex">当前页</param>  /// <param name="pageSize">每页条数</param>  /// <param name="orderby">排序字段 Lambda表达式</param>  /// <param name="where">查询条件 Lambda表达式</param>  /// <returns></returns>  public List<U_User> GetPageList<TKey>(int pageIndex, int pageSize, Expression<Func<U_User, TKey>> orderby,Expression<Func<U_User, bool>> where = null)  {    using (EFContext db = new EFContext())    {      var query = from d in db.U_User select d;      if (where != null)      {        query = query.Where(where);      }      var data = query.OrderBy(orderby)      .Skip((pageIndex - 1) * pageSize)      .Take(pageSize)      .ToList();      return data;    }  }

分页方法调用

  public ActionResult Index()  {    List<U_User> userList = userBLL.GetPageList(1, 20, c => c.CreateTime, c => c.UserName == "nee32");    return View(userList);  }