NHibernate 可空性检查里面不起作用

NHibernate nullability check inside where does not work

我有这个代码

var x = xId.HasValue ? _xRepository.Get(xId) : null;
var result = _yRepository.Find()
.Where(y=> x == null || x.Ys.Contains(y)).ToArray();

NHibernate 在此行中断 .Where(y=> x == null || x.Ys.Contains(y)),它执行所有条件,如果 x 的值等于 null,它不会在第一个条件处停止。

谁能帮我解决这个问题。

在这种情况下,我们可以在创建 SQL 之前评估 x 例如:

var toFilter = _yRepository.Find();

// should we handle x at all?
if (x != null)
{
    toFilter = toFilter.Where(y => x.ys.Contains(y));
}

var emailAddresses = toFilter.ToArray();

扩展

像这样的扩展

public static class MyExtensions
{
    public static IQueryable<T> MyContains<T, TFilter>(
         this IQueryable<T> list, 
         TFilter x, 
         Expression<Func<T, bool>> filterFunc)
    {
        if (x == null)
        {
            return list;
        }

        return list.Where(filterFunc);
    }
}

我们可以在一行中进行这样的过滤

var emailAddresses = _yRepository
   .Find()
   .MyContains(x, y => x.ys.Contains(y))
   .ToArray();