EF Core -如果Datetime-Value在列表中的2个DateTimes之间,则从iquerable中排除.&



我目前正在努力实现以下目标:

我有一个IQueryable (UserDataDateRange)有"from"one_answers";to"DateTime-Values和另一个更大的IQueryable (UserData)与DateTime-value基本上我想从UserData中排除DateTime-value之间的每一个数据和";to"将它与每个UserDataDateRange-Entry进行比较。而且每个DateTime都是可空的我只想忽略它们

这是我尝试过的:

private IQueryable<Userdata> ExcludeIfInDaterange(IQueryable<Userdata> query)
{
var dateRangeQuery = DBContext.UserDateDateRange.Where(x => x.From.HasValue && x.To.HasValue);
query = query.Where(l => !l.UserDate.HasValue);
foreach (var q in dateRangeQuery)
{     
query = query.Where(l => l.UserDate.Value <= q.From.Value && l.UserDate.Value >= q.To.Value);
}
return query;
}

从我的理解这应该工作?此外,我也尽量避免使用"toArray"因为从我的理解IQueryable基本上是我操作的SQL和toArray给我实际的数据。然而,我真的不知道我做错了什么,没有真正的例外,我只是得到以下错误:

无法从框架中获取函数。代码不可用。的错误码为CORDBG_E_CODE_NOT_AVAILABLE,或0x80131309.

我的函数似乎打破了查询,但我不知道为什么。我甚至不能使用&;Count()&;,它会给我同样的错误。

有人知道吗?

l.UserDate.Value <= q.From.Value && l.UserDate.Value >= q.To.Value

一个日期怎么可能同时早于From日期在同一时间晚于To日期?除非你有一些非常奇怪的UserDateDateRange表中的数据,过滤器将排除所有记录。

您还将两个互斥过滤器与AND操作符组合在一起,这是排除所有记录的另一种方式:

  • !l.UserDate.HasValue:UserDateisNULL
  • l.UserDate.Value <= ...:不可能满足,因为UserDateNULL

,没有必要使用.Valuenullable属性进行对比</<=>/>=

试试这样写:

private IQueryable<Userdata> ExcludeIfInDaterange(IQueryable<Userdata> query)
{
var dateRangeQuery = DBContext.UserDateDateRange.Where(x => x.From.HasValue && x.To.HasValue);
return query.Where(l => !l.UserDate.HasValue || !dateRangeQuery.Any(q => q.From <= l.UserDate && l.UserDate <= q.To));
}

相关内容

  • 没有找到相关文章

最新更新