首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过NHibernate搜索

通过NHibernate搜索
EN

Stack Overflow用户
提问于 2014-01-29 07:49:18
回答 1查看 140关注 0票数 2

我有一个搜索代码,它使用三个参数进行搜索,但我想传递一个参数,并将其与code.Can中的所有三个或四个或任意数量的变量匹配,任何一个都为我指明了前进的方向。

代码语言:javascript
复制
 ICriteria oCriteria = base.Session.CreateCriteria<Patient>("p").CreateCriteria("User", "u", NHibernate.SqlCommand.JoinType.InnerJoin)
                        .Add(Restrictions.Eq("u.IsDeleted", false)).Add(Restrictions.Eq("u.IsPatientSignUp", false)).Add(Restrictions.Like("u.FirstName", '%' + data + "%"))

                        .Add(Restrictions.Like("u.LastName", '%' + data + "%")).Add(Restrictions.Like("u.Email", '%' + data + "%"))
                        .Add(Restrictions.Or(cr1, cr2))
                        .AddOrder(Order.Asc(Projections.Cast(NHibernateUtil.Int32, Projections.Property("p.MedNexusId"))));
                        patient = oCriteria.List<Patient>().Skip(pageNumber * pageSize).Take(pageSize).ToList();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-29 12:08:31

NHibernate为我们提供了一组基本工具(在本例中为限制),我们可以扩展它们(创建新的ICriterion__)或组合它们。因此,我们可以创建这样的通用方法:

代码语言:javascript
复制
// multiple AND
public static AbstractCriterion AllLike(IEnumerable<string> properties, string toCompare)
{
    Conjunction conjunction = Restrictions.Conjunction();
    foreach (var name in properties)
    {
        conjunction.Add(Restrictions.Like(name, toCompare, MatchMode.Anywhere));
    }
    return conjunction;
}
// multiple OR
public static AbstractCriterion AnyLike(IEnumerable<string> properties, string toCompare)
{
    Disjunction disjunction = Restrictions.Disjunction();
    foreach (var name in properties)
    {
        disjunction.Add(Restrictions.Like(name, toCompare, MatchMode.Anywhere));
    }
    return disjunction;
}

现在我们可以这样称呼他们:

代码语言:javascript
复制
ICriteria oCriteria = ....
var toMatch = new[] {"u.LastName", "u.Email", ...};
criteria.Add(AllLike(toMatch, data));
// or
criteria.Add(AnyLike(toMatch, data));

注意:类似的实现已经存在了,Restrictions.AllEq(IDictionary propertyNameValues)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21425068

复制
相关文章

相似问题

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