zoukankan      html  css  js  c++  java
  • c#基于业务对象的筛选

    我们主要是使用List<T>.FindAll(Predicate<T> match)进行筛选

    其中Predicate<T>类型的参数,封装了筛选的规则。Predicate<T>是一个泛型委托,这意味着match参数是一个返回bool类型的方法,在FindAll()内部,会调用我们传递进去的这个方法。

    public delegate bool Predicate<T>(T obj);

    在讲述之前我们需要先复习一下几个概念

    首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

    多态性通过派生类覆写基类中的虚函数型方法来实现

    来个例子:

     

    abstract class MyAbs
          {
             
    public abstract void AbMethod1();
             
    public abstract void AbMethod2();
         }
         
    class MyClass1 : MyAbs
          {
             
    public override void AbMethod1()
              {
                 Console.WriteLine(
    "Abstarct method #1 of MyClass1");
             }
             
    public override void AbMethod2()
              {
                 Console.WriteLine(
    "Abstarct method #2 of MyClass1");
             }
         }
         
    class MyClient
          {
             
    public static void Main()
              {
                 MyAbs ma1 
    = new MyClass1();// 这里就是多态
                 ma1.AbMethod1();
                 ma1.AbMethod2();
             }
         }

    然后我们看下 如何来实现基于业务对象的筛选,主要来自 jimmyzhang的文章

    页面上的代码

     

        <asp:ObjectDataSource ID="objdsOrderList" runat="server" SelectMethod="GetList" TypeName="OrderManager" OnSelecting="objdsOrderList_Selecting">
         
    <SelectParameters>
          
    <asp:Parameter Name="fullList" Type="Object" />
           
    <asp:Parameter Name="filter" Type="Object" />

         
    </SelectParameters>
         
    </asp:ObjectDataSource>
            
    <asp:DropDownList ID="ddlYear" runat="server" OnSelectedIndexChanged="ddlYear_SelectedIndexChanged" AutoPostBack="True">
                
    <asp:ListItem Value="0">全部</asp:ListItem>
                
    <asp:ListItem>2011</asp:ListItem>
            
    </asp:DropDownList>
            
    <asp:DropDownList ID="ddlMonth" runat="server" OnSelectedIndexChanged="ddlMonth_SelectedIndexChanged" AutoPostBack="True">
            
    <asp:ListItem Value="0">全部</asp:ListItem>
            
    </asp:DropDownList>
            
    <asp:DropDownList ID="ddlDay" runat="server" OnSelectedIndexChanged="ddlDay_SelectedIndexChanged" AutoPostBack="True">
            
    <asp:ListItem Value="0">全部</asp:ListItem>
            
    </asp:DropDownList>
            
    <asp:DropDownList ID="ddlCountry" runat="server" AutoPostBack="True">
            
    <asp:ListItem Value="0">国家</asp:ListItem>
            
            
    <asp:ListItem Value="中国">中国</asp:ListItem>
            
    <asp:ListItem Value="法国">法国</asp:ListItem>
            
    </asp:DropDownList><br />
            
    <asp:GridView ID="gvOrderList" runat="server" DataSourceID="objdsOrderList">
                        
    <Columns>
                    
    <asp:BoundField DataField="orderid" HeaderText="订单ID" />
                    
    <asp:BoundField DataField="customerid" HeaderText="客户ID" />
                    
    <asp:BoundField DataField="orderdate" HeaderText="订单日期" />
                    
    <asp:BoundField DataField="country" HeaderText="国家" />
                
    </Columns>
            
    </asp:GridView>

     

    主要看下 objectdatasouce  里面的typename表示使用的类,parameter是select方法的两个参数,首先会调用这个方法来绑定。

    看下后台代码:

     protected void Page_Load(object sender, EventArgs e)
        {
            
    if (!IsPostBack)
            {
                AppendListItem(ddlMonth, 
    12);
                AppendListItem(ddlDay, 
    31);
            }
        }



        
    public int Year
        {
            
    get { return Convert.ToInt32(ddlYear.SelectedValue); }
        }

        
    public int Month
        {
            
    get { return Convert.ToInt32(ddlMonth.SelectedValue); }
        }

        
    public int Day
        {
            
    get { return Convert.ToInt32(ddlDay.SelectedValue); }
        }

        
    public string Country
        {
            
    get { return ddlCountry.SelectedItem.Text.ToString(); }
        }

        
    //获取查询语句
        public string QuerySql
        {
            
    get
            {
                
    int year = Year;
                
    int month = Month;
                
    int day = Day;

                List
    <string> sqlList=new List<string>();
                
    string subSql = string.Empty;

                
    if (year != 0)
                {
                    sqlList.Add(
    string.Format("Year(orderdate)={0}", year));
                }

                
    if (month != 0)
                {
                    sqlList.Add(
    string.Format("Month(orderdate)={0}", month));
                }

                
    if (day != 0)
                {
                    sqlList.Add(
    string.Format("Day(orderdate)={0}", day));
                }

                
    if (sqlList.Count > 0)//如果选择了任意一个下拉框,那么就拼装SQL语句
                {
                    
    string[] list = sqlList.ToArray();
                    subSql 
    = " where (" + string.Join(" and ", list) + ")";
                }

                
    return "select customerid,country,orderdate,orderid from Orders " + subSql;
            }
        }



        
    //为列表添加项目

        
    protected void AppendListItem(ListControl list, int end)
        {
            
    for (int i = 1; i <= end; i++)
            {
                list.Items.Add(
    new ListItem(i.ToString()));
            }
        }


        
    protected void objdsOrderList_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
        {
            
    //e.InputParameters["query"] = QuerySql;

            e.InputParameters[
    "fulllist"= OrderManager.GetList();// 获取全部列表
            e.InputParameters["filter"= Filter;

        }

        
    protected void ddlYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvOrderList.DataBind();
        }
        
    protected void ddlMonth_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvOrderList.DataBind();
        }
        
    protected void ddlDay_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvOrderList.DataBind();
        }





        
    public DateFilter<Order> Filter
        {
            
    get
            {
                DateFilter
    <Order> filter = new OrderFilter(Year, Month, Day,Country);
                
    return filter;
            }
        }

    还有用于筛选的类  后面我会放上全部代码  其中sqlhelper类 大家直接用微软的就OK  我就不贴了  直接放上 几个类的代码/Files/danyingjie/App_Code.rar

    希望对您有帮助。

  • 相关阅读:
    struts2基础---->自定义拦截器
    struts2基础---->第一个Struts2程序
    Vue基础---->vue-router的使用(一)
    java框架---->zxing框架的使用
    java基础---->java输入输出流
    java基础----->TCP和UDP套接字编程
    JS基础---->js中ajax的使用
    tomcat源码---->request的请求参数分析
    Android Http请求方法汇总
    Android如何通过shareduserid获取系统权限
  • 原文地址:https://www.cnblogs.com/danyingjie/p/1968635.html
Copyright © 2011-2022 走看看