首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对StartsWith的查询

对StartsWith的查询
EN

Stack Overflow用户
提问于 2014-06-30 08:13:02
回答 1查看 2.2K关注 0票数 6

我必须尝试在搜索的基础上寻找结果,这应该是开始,但我找不到QueryOver,它已经开始,还有其他的方式吗?

代码语言:javascript
复制
public IEnumerable<Company> Find(string keyword)
{
     var sesion = SessionController.CurrentSession;
     return sesion.QueryOver<Company>()
     .Where(
        Restrictions.On<Company>(x => x.CompanyName).IsLike("%" + keyword + "%") ||
        Restrictions.On<Company>(x => x.Id).IsLike("%" + keyword + "%")
     )
     .List<Company>();
}
EN

回答 1

Stack Overflow用户

发布于 2014-06-30 11:25:25

得到QueryOver基础结构支持的方法是使用显式MatchMode

代码语言:javascript
复制
sesion
  .QueryOver<Company>()
  .Where
  (
     Restrictions.On<Company>(x => x.CompanyName).IsLike(keyword, MatchMode.Start) ||
     Restrictions.On<Company>(x => x.Id         ).IsLike(keyword, MatchMode.Start)
  )
  .List<Company>();

但是,使用非常少的代码( Restrictions.On样式中的自定义扩展),我们甚至可以实现以下语法:

代码语言:javascript
复制
...
.Where
(
   Restrict.On<Contact>(x => x.CompanyName).StartsWith(keyword) ||
   Restrict.On<Contact>(x => x.Id         ).StartsWith(keyword)
)

以及Restrict的定义

代码语言:javascript
复制
public static class Restrict
{
    public static StringRestrictionBuilder<T> On<T>(Expression<Func<T, object>> expr)
    {
        return new StringRestrictionBuilder<T>(expr);
    }
    public class StringRestrictionBuilder<T>
    {
        readonly Expression<Func<T, object>> _expression;
        public StringRestrictionBuilder(Expression<Func<T, object>> expression)
        {
            _expression = expression;
        }
        public AbstractCriterion StartsWith(string value)
        {
            return Restrictions.On(_expression).IsLike(value, MatchMode.Start);
        }
        public AbstractCriterion Contains(string value)
        {
            return Restrictions.On(_expression).IsLike(value, MatchMode.Anywhere);
        }
        public AbstractCriterion EndsWith(string value)
        {
            return Restrictions.On(_expression).IsLike(value, MatchMode.End);
        }
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24485619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档