ここで記事を読んでいました: n-tier Zombie with wcf。
次のステートメント「zombieRepository.GetAll().Where(funcComp)」に出くわしました。 をGetAll()
返しますIQueryable
が、where
ステートメントはパラメーターで渡され、実際にはインターフェースをインターフェースとしてFunc<>
呼び出します。IQueryable
IEnumerable
この呼び出しの問題は、フィルターがdtos.ZombieIncident
SQL サーバー側ではなくクライアント側で行われることです (すべてを読み取ってからフィルターを適用します)。私の理解は正しいですか?
コードスニペット:
var paramStart = Expression.Parameter(typeof(dtos.ZombieIncident), "x");
Expression<Func<dtos.ZombieIncident, bool>> func = Expression.Lambda<Func<dtos.ZombieIncident, bool>>(
Expression.Call(Expression.Property(paramStart,
typeof(dtos.ZombieIncident).GetProperty(propertyName).GetGetMethod()),
typeof(String).GetMethod(searchType.ToString(), new Type[] { typeof(String) }),
new Expression[] { Expression.Constant(searchValue, typeof(string)) }),
new ParameterExpression[] { paramStart });
Func<dtos.ZombieIncident, bool> funcComp = func.Compile();
foreach (dtos.ZombieIncident zombie in zombieRepository.GetAll().Where(funcComp).ToList())
{
zombies.Add(ZombieIncidentDTOMapper.FromDTO(zombie));
}