我有以下函数,它根据 LINQ 表达式从数据库返回结果:
IQueryable<TEntity> FindAll<TEntity>(Expression<Func<TEntity, bool>> expression)
当我在使用.Any
列表中的函数时尝试从函数中提取数据时,我得到一个空引用异常。
但是,当我在没有特定条件的情况下提取数据并.Any
在 for each 循环中使用相同的函数时,一切正常。
这是尝试使用.Any
不起作用的功能的调用:
var ppcReports = repository.FindAll<PPCReport>(
x => x.ClientId == clientId &&
(campaigns.Any(c=> c.Id == x.CampaignId))
).ToList();
以及它正常工作的方式:
var ppcReports = repository.FindAll<PPCReport>(
x => x.ClientId == clientId).ToList();
foreach (var item in ppcReports)
{
if (campaigns.Any(c => c.Id == item.CampaignId))
{
// do something
}
}
我想知道为什么会发生这种情况,我做错了什么是在查询完成之前无法过滤结果吗?
通过在过滤结果之前调用.ToList()
它确实有效,所以我想我不能对IQueryable<T>
实现进行这样的操作?
var ppcReports = repository.
FindAll<PPCReport>(x => x.ClientId == clientId).
ToList().
Where(w => campaigns.Any(c => c.Id == w.CampaignId)).
ToList();