【问题标题】:QueryOver: Dynamically adding IsLike in Where clauseQueryOver:在 Where 子句中动态添加 IsLike
【发布时间】:2013-04-18 10:32:57
【问题描述】:

我有这个 QueryOver,我在其中选择 Log 记录,其中日志 NameD 开头em>F(使用通配符)。

conv.InnerTransaction.Session.QueryOver<Log>()
    .Where(l => l.DateTime > _datetime)
    .And(
        l => l.Name.IsLike("D%") || l.Name.IsLike("F%")
     )

相反,我希望名称搜索能够动态使用列表中的值。如何做到这一点?

我尝试过类似的方法:

var query = conv.InnerTransaction.Session.QueryOver<Log>()
            .Where(l => l.DateTime > _datetime);
foreach (var name in _names)
{
    query = query.And(l => l.Name.IsLike(name));
}

但这会导致列表中的每个名称都有多个 AND 语句,而它只需要是一个 OR。

【问题讨论】:

    标签: c# .net nhibernate queryover


    【解决方案1】:

    你试过Disjunction吗?我曾经有过类似的要求,但我不得不改用ConjunctionDisjunctionor 多个条件放在一起。

    var disjunction = new Disjunction();
    var query = Session.QueryOver<Log>().Where(l => l.DateTime > _datetime);
    foreach (var name in _names)
    {
        disjunction.Add(Restrictions.On<Log>(log => log.Name).IsLike(name));
    }
    var queryResult = query.Where(disjunction).List<Log>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多