LINQ to Object初体验(使用对象取代二维数组作数据筛选)

VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来

VS2008里面有个神奇的东西,称之为LINQ,可以透过相同的语法方式来处理各式各样的数据(SQL,XML,Object,...),小喵此次初体验感受一下这个东西,真的很好用,初体验来做个简单的测试,请看小喵娓娓道来

先来看一张LINQ的架构图(数据来源:曹祖圣老师在TechEd2007的简报)

要看完整的请点选上面的图档,从这张图来看LINQ可以用来取得相当多的数据,而只要数据能够用程Object的形式,就能够透过LINQ来存取

接着就开始这次的初体验

先说明一下小喵要做的:小喵弄个座位表格,分别有--SeatId(座位代号),SeatName(座位名称)
然后产生测试数据200个座位数据,SeatName(座位名称)用随机数产生a-z的字母加上SeatId当作是座位名称,最后用个界面来测试使用LINQ筛选数据(找字头相同的)

这样的题目以前小喵在ASP都是用二维数组来做,在.NET里面则是可以用对象的方式取代二为数组

先建立座位的对象如下:

_
Public Class Seat
Private m_SeatNum As Integer
Private m_SeatName As String

Public Property SeatNum() Property SeatNum() As Integer
Get
Return m_SeatNum
End Get
Set(ByVal value As Integer)
m_SeatNum = value
End Set
End Property
Public Property SeatName() Property SeatName() As String
Get
Return m_SeatName
End Get
Set(ByVal value As String)
m_SeatName = value
End Set
End Property
End Class

接着设计划面如下

?

产生的数据放在GridView1,筛选后的数据放在GridView2

接着撰写产生数据的部分

Protected Sub btnGen_Click() Sub btnGen_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGen.Click
Dim y As Integer
Dim s As Seat
mySeats.Clear()
For y = 1 To 200
s = New Seat
s.SeatNum = y
s.SeatName = GetRndChr() + "-" + y.ToString
mySeats.Add(s)
Next
ViewState("mySeats") = mySeats

Me.GridView1.DataSource = mySeats
Me.GridView1.DataBind()
End Sub
Protected Function GetRndChr() Function GetRndChr() As String
Dim i As Integer = 26
Randomize()
Dim tmpI As Integer = i * Rnd() + 1 + 96
Return Chr(tmpI)
End Function

然后就是我们的重点来了,在这些数据中,想要找SeatName(座位名称)a开头的数据,以前小喵可能会用个循环逐笔查,但是有了LINQ,就可以写成以下这样

Protected Sub btnSift_Click() Sub btnSift_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSift.Click
Dim Qry As Object = From ss In mySeats _
Where ss.SeatName Like Me.TextBox1.Text + "*" _
Select ss
Me.GridView2.DataSource = Qry
Me.GridView2.DataBind()

End Sub

各位可以发现,用这样超短的程序就能够做到筛选。真是太好了

熟悉T-SQL的朋友,您接着就可以想像以前T-SQL里面的Grou By,Distinct,Order By等等都可以再对象里面玩,甚至可以透过JOIN,把不同的对象数据作关联之后来取数据。真是神奇啊。

这次的初体验只是约略的感受一下LINQ的威力,此次的例子只是两个字段,一个条件的筛选,各位可以试想一下,如果应用在很多字段,并且结合其他的数据(LINQ可以使用JOIN)并且使用多重条件的筛选,那么可以节省多少的程序就能够达到相同的目的。未来有其他的测试再与大家分享。

^_^



以下是签名:

  • 欢迎转贴本站的文章,不过请在贴文主旨上加上【转贴】,并在文章中附上本篇的超链接与站名【topcat姗舞之间的极度凝聚】,感恩大家的配合。
  • 小喵大部分的文章会以小喵熟悉的语言VB.NET撰写,如果您需要C#的Code,也许您可以试着用线上的工具进行转换,这里提供几个参考
    • http://converter.telerik.com/
    • http://www.carlosag.net/tools/codetranslator/
    • http://www.developerfusion.com/tools/convert/vb-to-csharp/


Visual Studio and Development Technologies

(2005~Now)

topcat

Blog:http://www.dotblogs.com.tw/topcat

原文:大专栏  LINQ to Object初体验(使用对象取代二维数组作数据筛选)

原文地址:https://www.cnblogs.com/chinatrump/p/11490954.html

时间: 2024-10-12 11:48:31

LINQ to Object初体验(使用对象取代二维数组作数据筛选)的相关文章

PHP二维数组提取函数----把不需要的数据剔除

最近做APP接口的时候发现,在服务器返回给APP的接口数据很多都是二维数组的形式,但是这就带来了一些问题,有一些数据是没有用的,这些没有用的数据会给APP方面造成麻烦,于是搜索解决办法发现网上和手册都没有能解决这个问题的函数,于是自己写了一个函数delMemberGetNewArray,可以把二维数组多余的数据给剔除掉,对于以后我们处理数据方面提供了便利,看代码 1 /* 2 * delMemberGetNewArray 得到一个新二维数组 3 * @ $data 原始数组 4 * @ $del

二维数组的传参数的方法

如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如何 将二维数组作为参数传递,原文如下(略有改变,请原谅): [原文开始] 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的

指针与二维数组间的关系

1.四种表示a[i][j]的形式是等价的: a[i][j]==*(a[i]+j)==*(*(a+i)+j)==(*(a+i))[j] 2.通过行指针p引用二维数组a的元素a[i][j]的方法可用以下4种等价形式: p[i][j]==*(p[i]+j)==*(*(p+i)+j)==(*(p+i))[j] 3.对指向二维数组的行指针p进行初始化的方法: p=a 或p=&a[0] 4.对指向二维数组的列指针进行初始化的方法(以下三种方法等价): p=a[0] 或 p=*a 或 p=&a[0][0

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

如何将二维数组作为函数参数

如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如何 将二维数组作为参数传递,原文如下(略有改变,请原谅): [原文开始] 可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的

数据结构 二维数组--&gt;稀疏数组--&gt;二维数组

稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不同的值 2>把具有不同值的元素行列及值记录在一个小规模数组中,从而缩小程序规模 row col val [0]   总行       总列 有效数量 [1]  第一个数据行  第一个数据列 第一个数据值 [2]  第二个数据行 第二个数据列 第二个数据值 二维数组==>稀疏数组思路: 1>遍

体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)

结对伙伴:信1201-2班高扬.信1201-1班韩雪东 一.题目要求与设计思想 题目要求:在上一次的基础上把数组变为二维数组,然后首尾相接,形成连环,然后求和最大的子数组: 设计思想:一维数组首尾相连的问题已经得到解决,二位数组求和最大的子数组的问题也已经解决了,就是把这两个程序思想融在一起,然后在短短的时间内就完成了这次课堂项目. 二.源代码 1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console applic

二维数组按某列排序

1 using FrameWork.IoC.Achieve.IoCAbstractBasics; 2 using FrameWork.IoC.Achieve.IoCBasics; 3 using FrameWork.IoC.Case.Test; 4 using FrameWork.IoC.Case.Test.TestOne; 5 using FrameWork.IoC.Case.Test.TestTwo; 6 using System; 7 using System.Collections; 8

C#/JS 获取二维数组组合

C#获取二维数组组合 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace HF.SHOP.WebSite { public partial class Demo : System.Web.UI.Page { List