Итак, я пытаюсь оптимизировать запрос, который выполняет текстовый поиск по 1000 строк и отображает 100 из них. Для этого я пытаюсь понять некоторый код из 101 образца запросов Microsoft (найдено здесь ).
Вот код, который я хочу понять:
[Category("Advanced")]
[Title("Dynamic query - Where")]
[Description("This sample builds a query dynamically to filter for Customers in London.")]
public void LinqToSqlAdvanced02()
{
IQueryable<Customer> custs = db.Customers;
ParameterExpression param = Expression.Parameter(typeof(Customer), "c");
Expression right = Expression.Constant("London");
Expression left = Expression.Property(param, typeof(Customer).GetProperty("City"));
Expression filter = Expression.Equal(left, right);
Expression pred = Expression.Lambda(filter, param);
Expression expr = Expression.Call(typeof(Queryable), "Where", new Type[] { typeof(Customer) }, Expression.Constant(custs), pred);
IQueryable<Customer> query = db.Customers.AsQueryable().Provider.CreateQuery<Customer>(expr);
ObjectDumper.Write(query);
}
Итак ... Я понимаю, что это эзотерика, но зачем Expression.Call () нужна ссылка на DbSet, переданная в CreateQuery как <T>
?