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

本文主要是介绍透过自定义Function当作LINQ的Where条件(多重条件筛选)范例与动态教学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


 

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

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

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

透过自定义Function当作LINQWhere条件

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

 

文件夹: < 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#版本,由于LINQVB.NETC#中的语法有蛮多地方不同,因此也期望吕老师能够也出一本VB.NET的版本造广大VB.NET的使用者。

 

转载于:https://www.cnblogs.com/topcat/archive/2008/06/08/1215819.html

这篇关于透过自定义Function当作LINQ的Where条件(多重条件筛选)范例与动态教学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541222

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情