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();
我有这个代码
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();