LINQ 式に基づいてデータベースから結果を返す次の関数があります。
IQueryable<TEntity> FindAll<TEntity>(Expression<Func<TEntity, bool>> expression)
リストから関数を使用しているときに関数からデータを取得しようとすると.Any
、null 参照例外が発生します。
ただし、その特定の条件なしでデータを取得.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();