zoukankan      html  css  js  c++  java
  • LINQ(QueryExtender 控件)

           指定 EntityDataSource 控件的 where 子句的另一个办法是使用 QueryExtender 控件。QueryExtender 控件的值非常的灵活。这个控件支持一系列选择数据的方法,其中很多是直接使用 EntityDataSource 的 where 子句很难或者根本没有办法实现的。

           QueryExtender 使用声明式语法指定过滤器,在熟悉它需要的格式前可能会觉得令人沮丧,但后续的灵活性确实对得起我们付出的努力。

    使用 SearchExpression

           首先要看的过滤器是 SearchExpression,它搜索所有指定属性以某个表达式开头、结尾或包含某个表达式的实体类实例。

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID"
        DataSourceID="EntityDataSource1">
        <Columns>
            <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" ReadOnly="True" SortExpression="EmployeeID" />
            <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
            <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="TitleOfCourtesy" HeaderText="TitleOfCourtesy" SortExpression="TitleOfCourtesy" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
        </Columns>
    </asp:GridView>
    <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=NorthwindEntities"
        DefaultContainerName="NorthwindEntities" EnableFlattening="False" EntitySetName="Employees">
    </asp:EntityDataSource>
    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="EntityDataSource1">
        <asp:SearchExpression DataFields="City" SearchType="StartsWith">
            <asp:ControlParameter ControlID="TextBox1" />
        </asp:SearchExpression>
    </asp:QueryExtender>
    <asp:Label ID="Label1" runat="server" Text="City:"></asp:Label>
    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>

    image

           QueryExtender 标签的解释:

    • TargetControlID 特性指定要过滤的数据源
    • DataFields 特性指定要搜索的字段
    • SearchType 特性的有几个常用的可选值
    • ControlParameter 标签可以从各个控件中挑选搜索条件,这里是一个文本框的值

           DataFields 可以指定多个字段,下面示例是同时搜索 City 和 LastName 字段:

    <asp:SearchExpression DataFields="City,LastName" SearchType="StartsWith">
        <asp:ControlParameter ControlID="TextBox1" />
    </asp:SearchExpression>

    image

    使用 RangeExpression

           RangeExpression 是范围表达式,要注意的是,RangeExpression 只能和单个字段一起使用。MaxType 和 MinType 的值可指定搜索的两个边界是否被包含。

    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="EntityDataSource1">
        <asp:RangeExpression DataField="EmployeeID" MaxType="Inclusive" MinType="Inclusive">
            <asp:ControlParameter ControlID="TextBox1" />
            <asp:ControlParameter ControlID="TextBox2" />
        </asp:RangeExpression>
    </asp:QueryExtender>

    image

          

    使用 PropertyExpression

           PropertyExpression 可以过滤出那些一个或多个属性和指定的值匹配的数据。和 SearchExpression 使用的部分匹配不同,PropertyExpression 是通过 C# 的 == 关键字完成的。

    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="EntityDataSource1">
        <asp:PropertyExpression>
            <asp:ControlParameter ControlID="TextBox1" Name="City" />
            <asp:ControlParameter ControlID="TextBox2" Name="LastName" />
        </asp:PropertyExpression>
    </asp:QueryExtender>

    image

    使用 MethodExpression

           这里要介绍的最后一个过滤器是最灵活的。它可以指定执行过滤时要调用的方法。这个方法里面的内容是完全开放的,但通常是 LINQ 表达式。

    public class QueryExtenderMethods
    {
        public static IQueryable<Employee> FilterEmployees(IQueryable<Employee> data)
        {
            return from d in data
                   where d.City == "London" && d.Country == "UK"
                   select d;
        }
    }
    <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="EntityDataSource1">
        <asp:MethodExpression TypeName="QueryExtenderMethods" MethodName="FilterEmployees" />
    </asp:QueryExtender>

    image

           定义的方法必须是静态的。必须接收和返回一个 IQueryable<T> ,其中 T 是要使用的实体类。TypeName 指定了方法所在的类名,MethodName 指定方法名。现在,当数据加载到 GridView 时,它首先会通过方法里的 LINQ 表达式进行过滤。

    LINQ 系列的总结

    • LINQ 是 .NET Framework 的核心特性,非常支持C#语言。
    • 所有 LINQ 应用程序能够统一的原则是它强调声明性编程而不是功能性编程。
    • LINQ to Collections 以及 LINQ to DataSet 没有任何坏处。
    • LINQ to XML 可能是 LINQ 中最实用的部分,为开发人员提供了现代、直接的方式加载、搜索和构建 XML 文档。
    • LINQ to Entities 为开发人员提供了一个最强大的工具,但也有一些新的潜在问题。
    • 如果你不放心且不需要更强大的 LINQ to Entities 特性,那最好还是坚持使用简单直接的 ADO.NET 命令的方法。
  • 相关阅读:
    Git入门
    基于sendmail的简单zabbix邮件报警
    zabbix agentd安装
    我整理的一份来自于线上的Nginx配置(Nginx.conf),希望对学习Nginx的有帮助
    【转载】Spring Boot引起的“堆外内存泄漏”排查及经验总结
    lodop+art-template实现web端漂亮的小票样式打印
    《阿里巴巴Java开发手册》改名《Java开发手册》,涵盖史无前例的三大升级
    Spring Boot的学习之路(02):和你一起阅读Spring Boot官网
    Spring Boot的学习之路(01):缘起
    『 效率工具 』Spring Boot版的轻量级代码生成器,减少70%以上的开发任务
  • 原文地址:https://www.cnblogs.com/SkySoot/p/2652655.html
Copyright © 2011-2022 走看看