有没有在线学习c#2.0语言功能“谓词”的好教程?
我正在尝试学习如何使用谓词和linq来修改我的查询
我要做的是查询客户表并根据更改的条件对其进行过滤。例如
现在我正在使用感觉非常错误的if / else语句
另外,我可能需要添加其他过滤器,所以我想要一个灵活的解决方案来解决这个问题,这个问题很容易扩展而不会破坏任何东西(我认为是开放的封闭原则)
答案 0 :(得分:1)
谓词只是具有以下签名的方法:
bool Predicate<T>(T item)
它表示可由T类型的对象验证或不验证的条件。
在链接中用于过滤.Where
子句中的可枚举。
您还可以使用返回布尔值的lambdas:
item => item.Nickname == "ThinkBeforeCoding";
答案 1 :(得分:0)
(顺便说一句 - 与LINQ-to-SQL一起使用的基于lambda的谓词是C#3.0 / .NET 3.5,而不是C#2.0)
嗯,具体你想做什么?
谓词只是过滤器(作为委托或表达式);他们不直接允许您修改TSQL等,除非您将它们与LINQ-to-SQL提供程序可以处理的函数(these)或映射到您的数据的UDF组合在一起-context作为可组合函数(FunctionAttribute
)。
最简单的:
谁是男性&gt;有邮政编码= 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。