(顺便说一句 - 与 LINQ-to-SQL 一起使用的基于 lambda 的谓词是 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);
ETC
您也可以手动构建基于表达式的谓词,但这需要更多的工作,并且需要Expression API的知识。