在本系列的Part 5部分,我提到了。NET 3。5里新引入的<asp:LinqDataSource>控件,利用它我们可以轻易的将ASP。NET UI控件绑定到LINQ to SQL数据模型。在另一篇有关<asp:ListView>控件的文章里(Part 1 - Building a Product Listing Page with Clean CSS UI),我多多少少演示了其用法。
在这些文章里,我执行的查询都是比较直观的(其where子语句都是处理单个表的数据),今天的文章,我将演示如何基于LinqDataSource控件来使用的比较全的LINQ查询表达式,以及任意的LINQ to SQL查询表达式。
Quick Recap: <asp:LinqDataSource> with a Declarative Where Statement
在本系列的Part 1 和 Part 5部分,我演示了如何利用LinqDataSource控件内置的条件过滤功能,来对某个LINQ to SQL数据模型进行限制。
比如,假定我们已经为Northwind数据库创建了一个LINQ to SQL数据模型(具体过程可参考Part 2部分),我们可以在页面上添加一个<asp:LinqDataSource>控件,并设置一个<where>过滤条件,仅仅返回某个指定category的所有产品。
在大多数情况下没有问题。但是如果我们想使过滤条件更为复杂一些呢?比如,我们想动态的设置countries,而只将这些国家的产品显示出来,这么办呢?
利用<asp:LinqDataSource>控件的Selecting事件
为了处理用户定制查询,你可以构建一个事件处理器来处理<asp:LinqDataSource>控件的"Selecting"事件。 在该事件处理器里你可以任意地写代码,以检索你想要得到的结果。为此,你可以利用一个LINQ to SQL查询表达式,或调用一个存储过程,或使用一个Custom SQL Expression(用户定制查询),以对该LINQ to SQL数据模型进行检索。一旦你检索到了一连串的数据(a sequence of data),你需要做的就是将其赋值给一个LinqDataSourceSelectEventArgs对象的"Result"属性。
【编辑推荐】