透过自定义Function当作LINQ的Where条件(多重条件筛选)范例与动态教学

阅读: 评论:0

透过自定义Function当作LINQ的Where条件(多重条件筛选)范例与动态教学

透过自定义Function当作LINQ的Where条件(多重条件筛选)范例与动态教学

 以往为了让用户筛选资料的时候可以灵活应用,会在画面上每个条件前面加个CheckBox,让使用者可以自由勾选要筛选的字段并设定条件,如下图:


 

这样的方式在以往数据源是SQL的时候,可以透过判断式、加上组合SQL字符串的方式达到,但是在Linq里面要怎么处理呢??

小喵再练习Linq的过程中,想到了这个问题...刚好康廷数位的吕高旭老师MSN过来与小喵聊到要写LINQ书籍的计划,小喵于是向吕老师请教了这方面的问题...

小喵做了一个教学动画,透过自己写的一个Function来当作筛选的条件,相关内容请点选以下的超链结:

透过自定义Function当作LINQ的Where条件

相关的画面程序代码如下:

 

文件夹: < asp:TextBox  ID ="txtDir"  runat ="server" ></ asp:TextBox >  
< asp:Button  ID ="btnGetFiles"  runat ="server"  Text ="取得档案信息"   />  
< br  />  
讯息: < asp:Label  ID ="lblMsg"  runat ="server"  Text =""  ForeColor ="Red"  Font-Bold ="True" ></ asp:Label >  
< hr  />  
< table >  
     < tr >  
         < td  valign ="top" >  
            筛选条件: < br  />  
             < asp:CheckBox  ID ="chkExten"  runat ="server"  Text ="扩展名:"   />  
             < asp:DropDownList  ID ="ddlExten"  runat ="server" >  
             </ asp:DropDownList >< br  />  
             < asp:CheckBox  ID ="chkFileName"  runat ="server"  Text ="檔名包含:"   />  
             < asp:TextBox  ID ="txtFileName"  runat ="server" ></ asp:TextBox >< br  />  
             < asp:Button  ID ="btnQry"  runat ="server"  Text ="筛选"   />< br  />  
             < asp:Button  ID ="btnQryFunc"  runat ="server"  Text ="透过Function筛选"   />  
             
         </ td >  
         < td >  
             < asp:GridView  ID ="GridView1"  runat ="server" >  
             </ asp:GridView >  
         </ td >  
     </ tr >  
</ table >

CodeFile的内容如下:

     Dim  myFiles  As  List( Of  FileInfo) 
     Protected   Sub  Page_Load()  Sub  Page_Load( ByVal  sender  As   Object ,  ByVal  e  As  System.EventArgs)  Handles   Me .Load 
        myFiles  =  ViewState( " myFiles " ) 
         If  myFiles  Is   Nothing   Then  
            myFiles  =   New  List( Of  FileInfo) 
         End   If  
     End Sub  
     Protected   Sub  btnGetFiles_Click()  Sub  btnGetFiles_Click( ByVal  sender  As   Object ,  ByVal  e  As  System.EventArgs)  Handles  btnGetFiles.Click 
        myFiles.Clear() 
              For   Each  FileName  As   String   In  My.Computer.FileSystem.GetFiles( Me .txtDir.Text) 
             ' 取得FileInfo並放入myFiles 
            myFiles.Add(My.Computer.FileSystem.GetFileInfo(FileName)) 
         Next  
             ViewState( " myFiles " )  =  myFiles 
              Me .GridView1.DataSource  =  myFiles 
         Me .GridView1.DataBind() 
              Me .ddlExten.DataSource  =  myFiles 
         Me .ddlExten.DataTextField  =   " Extension "  
         Me .ddlExten.DataValueField  =   " Extension "  
         Me .ddlExten.DataBind() 
     End Sub  
     Protected   Sub  btnQry_Click()  Sub  btnQry_Click( ByVal  sender  As   Object ,  ByVal  e  As  System.EventArgs)  Handles  btnQry.Click 
         Dim  o  =  From FI  In  myFiles _ 
                Where FI.Extension  =   Me .ddlExten.SelectedValue  And  FI.Name Like  " * "   &   Me .txtFileName.Text  &   " * "  _ 
                 Select  FI 
         Me .GridView1.DataSource  =  o 
         Me .GridView1.DataBind() 
     End Sub  
     Protected   Sub  btnQryFunc_Click()  Sub  btnQryFunc_Click( ByVal  sender  As   Object ,  ByVal  e  As  System.EventArgs)  Handles  btnQryFunc.Click 
         ' Dim o = From FI In myFiles _ 
         Try  
             Dim  o  =  From FI  In  myFiles _ 
                    Where ChkFile(FI) _ 
                     Select  FI 
             Me .GridView1.DataSource  =  o 
             Me .GridView1.DataBind() 
      
         Catch  ex  As  Exception 
             Me .lblMsg.Text  =  ex.Message 
         End   Try  
     End Sub  
     Private   Function  ChkFile()  Function  ChkFile( ByVal  FI  As  FileInfo)  As   Boolean  
         Dim  rc  As   Boolean   =   True  
         Try  
             If   Me .chkExten.Checked  Then  
                 Dim  rcExten  As   Boolean   =   True  
                 If   Not  FI.Extension  =   Me .ddlExten.SelectedValue  Then  
                    rcExten  =   False  
                 End   If  
                rc  =  rc  And  rcExten 
             End   If  
             If   Me .chkFileName.Checked  Then  
                 Dim  rcFN  As   Boolean   =   True  
                 If   InStr ( 1 , FI.Name,  Me .txtFileName.Text, CompareMethod.Text)  =   0   Then  
                    rcFN  =   False  
                 End   If  
                rc  =  rc  And  rcFN 
             End   If  
             Return  rc 
              Catch  ex  As  Exception 
             Throw   New  Exception(ex.Message) 
         End   Try  
     End Function

 要记得两个Imports

Imports System.IO
Imports System.Linq

各位朋友可以自己实际的Step By Step试试看....透过这个过程可以了解

  1. Linq运作的时机

  2. Linq运作的方式:关键在From FI In myFiles

 

创造无限可能的Linq应用

透过自定义Function的方式来下达Where,小喵的指是其中的一种应用,这样的方是大大的提高了Linq的应用,试想各式的条件,本来没有提供的判断,都可以透过自己的Function解决。这让Linq的活用能力从内定提供的方法,衍生到无限的可能(只要.NET Framework可以做的就可能)。

小喵举个例子,例如有某个文件夹中存放了很多程序的Source Code,如果要找出这些Source Code的内容里面,包含某几个关键词,或者用到某个Function,这样的问题一样可以透过自定的Function来达到。 

在此要特别感谢康廷数位吕高旭老师的帮忙,也在此强烈推荐吕老师的新书【LINQ最佳实务讲座】,不过很可惜的是目前只会推出C#版本,由于LINQ在VB.NET与C#中的语法有蛮多地方不同,因此也期望吕老师能够也出一本VB.NET的版本造广大VB.NET的使用者。

 

转载于:.html

本文发布于:2024-02-01 06:09:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170673898634448.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:条件   自定义   范例   动态   LINQ
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23