今天在做一個(gè)小項(xiàng)目時(shí),用到了NHibernate,使用了模糊查詢(Like),在后臺(tái)用IQueryable去接收session.Query<T>()的查詢結(jié)果。
代碼如下:
1 /// <summary>2 /// 獲取所有記錄3 /// </summary>4 /// <returns></returns>5 public virtual IQueryable<T> LoadAll()6 {7 var result = Session.Query<T>();8 return result;9 }
在BLL層想用NHibernate的Where去做模糊查詢,查了好多資料可以有兩種方式:
第一種:
.Where(Restrictions.On<Cat>(c => c.Name).IsLike("%anna%"))
第二種:
.WhereRestrictionOn(c => c.Name).IsLike("%anna%")
然后調(diào)用base.LoadAll(),但是base.LoadAll()后面的WhereRestrictionOn怎么也出不來,郁悶!!
在再試第一種方式,也不對(duì)。。。
休息一會(huì),回來再看,原來底層函數(shù)的返回值是IQueryable,不是IQueryover。
IQueryover:是NHibernate類庫中的一個(gè)接口,可以使用QueryOver查詢。
IQueryable:是Linq中的一個(gè)接口,與NHibernate無關(guān)。
最后修改為L(zhǎng)inq的語法Where(n=>n.Name.Contains(name))(原來這么簡(jiǎn)單!):
1 /// <summary> 2 /// 獲取用戶 3 /// </summary> 4 /// <param name="count">總數(shù)</param> 5 /// <param name="pageIndex">頁索引</param> 6 /// <param name="pageSize">頁記錄數(shù)</param> 7 /// <param name="name">搜索條件:用戶名</param> 8 /// <returns></returns> 9 public IQueryable<User> LoadUserByName(out long count, int pageIndex, int pageSize, string name)10 {11 var result = base.LoadAll().Where(n=>n.Name.Contains(name));12 count = result.LongCount();13 14 return result.Skip((pageIndex - 1) * pageSize).Take(pageSize);15 }
查看生成的SQL語句:
1 2014-01-14 15:07:28,155 [55] INFO NHibernate.Loader.Loader [(null)] <(null)> - select cast(count(*) as INTEGER) as col_0_0_ from T_User user0_ where user0_.Name like ('%'||@p0||'%')2 2014-01-14 15:07:28,159 [55] INFO NHibernate.Hql.Ast.ANTLR.Tree.FromElement [(null)] <(null)> - handling PRoperty dereference [DomainModel.User (n) -> Name (Class)]3 2014-01-14 15:07:28,160 [55] INFO NHibernate.Loader.Loader [(null)] <(null)> - select user0_.UserId as UserId0_, user0_.Name as Name0_, user0_.PassWord as Password0_, user0_.Telephone as Telephone0_, user0_.Email as Email0_, user0_.IsDeleted as IsDeleted0_ from T_User user0_ where user0_.Name like ('%'||@p0||'%') limit 10
總結(jié):
1.沒有對(duì)NHibernate的查詢理解透;
2.對(duì)Linq的語法也不熟悉;
此處寫下來,留作備注,下次參考。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注