NHibernate Like 对嵌套字符串属性的限制

NHibernate Like restriction on nested string properties

为简单起见,我们假设有两个实体:

public class Entity
{
    public string Value { get; set; }

    public ChildEntity Child { get; set; }
}

public class ChildEntity
{
    public string Value { get; set; }
}

我需要找到 ValueChild.Value 与指定字符串 query 一样不敏感的所有实体。

这就是我现在所拥有的:

Entity entity = null;
ChildEntity child = null;

var nhibernateQuery = session
    .QueryOver(() => entity)
    .JoinAlias(() => entity.Child, () => child);

if (!string.IsNullOrWhiteSpace(query))
{
    nhibernateQuery = nhibernateQuery
        .Where(
            Restrictions.Or(
                Restrictions.On(() => entity).IsInsensitiveLike(query),
                Restrictions.On(() => child).IsInsensitiveLike(query)
            )
        );
}

return nhibernateQuery.List().ToArray();

我得到 NullReferenceException - 似乎 Restrictions.On 没有正确处理别名。

我尝试过的另一种方法是 .JoinQueryOver(),它是由 this post:

建议的
return session
   .QueryOver<Entity>()
       .Where(Restrictions.InsensitiveLike("Value", query))
   .JoinQueryOver(e => e.Child)
       .Where(Restrictions.InsensitiveLike("Value", query));

除了一件事,这个东西有用:它 returns 所有 Value Child.Value 都像 [=15= 的项目].我需要同样的东西,但具有 or 逻辑。

应该怎么做才能让它发挥作用?我想使用 .QueryOver(),有或没有别名,但没有 .CreateCriteria(),但如果你能帮助我解决任何问题,我将不胜感激。

问题已通过使用 NHibernate LINQ 解决.Query<>()
它可以自行解决所有连接和关系。
同时,.Contains() 方法被翻译为不区分大小写的 LIKE 语句,用于 MS SQL 适合我的需要。

var nhibernateQuery = session
    .Query<Entity>();

if (!string.IsNullOrWhiteSpace(query))
{
    nhibernateQuery = nhibernateQuery
        .Where(e => e.Value.Contains(query) || e.Child.Value.Contains(query));
}

return nhibernateQuery.ToArray();