我想在我的基础存储库类中添加一个方法,允许我使用LIKE表达式,但我不太清楚如何解决这个问题.我想创建一个通用方法,查看传入的表达式树,并在传入的字符串值中查找通配符.然后,它将相应地生成QueryOver语句.
我目前有以下内容:
public IList<T> FindAll(Expression<Func<T,bool>> criteria,char wildCard) { return SessionFactory.GetCurrentSession() .QueryOver<T>() .Where(criteria) .List(); }
显然,困难的部分尚未到来.我需要查看表达式树并动态地使用QueryOver构建查询.寻找关于如何继续这一点的一些指示.或者我只是在这里浪费时间,应该在我的存储库中创建处理LIKE查询的单个方法?
附加标准
理想情况下,我想区分以下内容:
>字段LIKE’search%’
>字段LIKE’%search’
>字段LIKE’%search%’
解决方法
在QueryOver中编写Like表达式有两种方法.
如果你从Where子句中删除它:
.Where(Restrictions.Like(Projections.Property<T>(*projected property*),*string value*,MatchMode.Anywhere))
然而,这有点长.
所以你可以使用WhereRestrictionOn:
.WhereRestrictionOn(*projected property*).IsLike(*string value*,MatchMode.Anywhere)
这意味着你需要传递两个参数,如:
FindAll<User>(x => x.FirstName,"bob");
你可以使用.Contains,.StartsWith,.EndsWith,但我不确定.
FindAll<User>(x => x.FirstName.Contains("bob")); FindAll<User>(x => x.FirstName.StartsWith("bob")); FindAll<User>(x => x.FirstName.EndsWith("bob"));
我不认为那些在NHibernate中工作.
希望有所帮助.