1

在 Windows 下,我的代码类似于以下内容:

var active_ids = QueryOver.Of<Members>()
.Where(m => m.HasAccess);

我发现如果我在此行之后中断调试器并键入
?active_ids.criteria,则会显示以下内容:

{IsApproved = True}

var namematch = Restrictions.Disjunction();
namematch.Add(Restrictions.Where<Members>(m => m.FirstName.IsInsensitiveLike(name.AsStartsWith())));
namematch.Add(Restrictions.Where<Members>(m => m.LastName.IsInsensitiveLike(name.AsStartsWith())));
namematch.Add(Restrictions.Where<Members>(m => m.LastName.IsInsensitiveLike(("-" + name).AsContains())));

我发现如果我在此行之后中断调试器并键入
?namematch.criteria,则会显示以下内容:

Count = 3
    [0]: {FirstName ilike bak%}
    [1]: {LastName ilike bak%}
    [2]: {LastName ilike %-bak%}

但是,当我有一个非常复杂的查询时,类似于:

var matchQuery = session.QueryOver<Member_Graph>()
.WithSubquery.WhereProperty(vg => vg.MemberId).In(memberlist)
.Where(approved_members)
.JoinQueryOver<Trainers_Graph>(t => t.trainers)
.Where(namematch)
.Select(t => t.trainers);

但是,当我输入?matchQuery

'NHibernate...' 不包含'criteria' 的定义,并且没有扩展方法'criteria' 接受类型的第一个参数... 可以找到(您是否缺少 using 指令或程序集引用?)

那么,使用 Visual Studio 调试器,我如何列出 nHibernate 为 matchQuery 生成的完整条件

4

1 回答 1

1

session.QueryOver() 只是一个 ICriteria 的包装器,它具有很好的显示为字符串的能力。要访问基础标准,请使用matchQuery.RootCriteria

于 2011-08-19T12:37:10.863 回答