(между прочим - основанные на лямбде предикаты, используемые с LINQ-to-SQL, - это C # 3.0 / .NET 3.5, а не C # 2.0)
Ну, что конкретно вы пытаетесь сделать?
Предикаты - это просто фильтры (в качестве делегата или выражения); они напрямую не позволяют вам изменять TSQL и т. д., если только вы не объедините их с функциями, которые может обрабатывать поставщик LINQ-to-SQL ( эти ), или с UDF, сопоставленными с контекст данных как составные функции (FunctionAttribute
).
Самое простое:
кто из мужчин И> имеет почтовый индекс = 90210
var qry1 = from cust in ctx.Customers
where cust.Gender == 'M' && cust.Zip = '90210'
select cust;
var qry2 = from cust in ctx.Customers
where cust.Zip = '90210'
select cust;
Или для нетривиального примера (форма динамического поиска / комбинирование отдельно)
IQueryable<Foo> query = ctx.Customers;
// note "gender" here is "char?" for this example
if(gender != null) query = query.Where(x=>x.Gender == (char)gender);
if(zip != null) query = query.Where(x=>x.Zip == zip);
и т.д.
Вы также можете создавать предикаты на основе выражений вручную, но это более трудоемкий процесс, требующий знания Expression API .