有没有在线学习c#2.0语言功能“谓词”的好教程?学习谓词的资源
我试图了解如何使用谓词的LINQ一起SQL修改我的查询
什么,我试图做的是查询客户的表和过滤它的基础上不断变化的标准。例如
- 找到谁拥有邮编= 90210
- 找到谁是男性
- 找到谁是男性,所有客户的所有客户所有的客户>有邮政编码= 90210
现在的我这样做使用if/else语句,这感觉很不错
也有可能,我将不得不添加其他过滤器,所以我想要一个灵活的解决方案,这个问题很容易扩展无线thout打破任何东西(开闭原则,我认为)
有没有在线学习c#2.0语言功能“谓词”的好教程?学习谓词的资源
我试图了解如何使用谓词的LINQ一起SQL修改我的查询
什么,我试图做的是查询客户的表和过滤它的基础上不断变化的标准。例如
现在的我这样做使用if/else语句,这感觉很不错
也有可能,我将不得不添加其他过滤器,所以我想要一个灵活的解决方案,这个问题很容易扩展无线thout打破任何东西(开闭原则,我认为)
(顺便说一句 - 与使用基于λ-谓词LINQ到SQL是C#3.0/.NET 3.5,不C#2.0)
嘛,有什么特别的你想做什么?
谓词只是过滤器(作为委托或表达式);它们不直接允许您修改TSQL等,除非将它们与LINQ-to-SQL提供程序可以处理的函数(these)或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。
我想要做的是查询客户的表格,并根据更改标准对其进行过滤。例如 找到谁拥有邮编= 90210 找到谁是男性 找到谁是男性,所有客户的所有客户所有的客户>有邮政编码= 90210 现在我使用的if/else这感觉非常不对 – jorsh1 2009-02-11 19:41:59
谓词可以简单地通过以下的签名的方法:
bool Predicate<T>(T item)
它表示可由类型T的对象进行验证或不是条件
它是在链路过滤可枚举使用在.Where
条款中。
您也可以使用返回一个布尔值的lambda表达式:
item => item.Nickname == "ThinkBeforeCoding";
回复您的评论 - 事实上,大多数LINQ操作具有“延迟执行”(没有任何反应,直到你迭代它),让您在“撰写”一个逐步查询 - 通过一系列步骤添加过滤器/排序/投影等。只有Count(),Max()等东西立即执行。 – 2009-02-11 23:41:25