linq c#,linq原理 c#

linq c#,linq原理 c#,c#中LINQ的基本用法实例

语言集成查询(LINQ)是Visual Studio 2008和中引入的一项创新功能。NET Framework版。下面这篇文章主要介绍LINQ在c#中的基本用法,有需要的朋友可以参考一下。让我们来看看。

一、什么是LINQ

LINQ(发音链接)代表语言集成查询(Language Integrated Query),是。NEt框架。它允许我们通过使用SQL查询数据库来查询数据集合。使用它,您可以从数据库、程序对象集合和XML文档中查询数据。

下面是一个简单的例子,可以查询数组中小于8的数并输出。

一般步骤:获取数据源,创建查询,执行查询。请注意,虽然查询是在语句中定义的,但直到最后一条foreach语句请求其结果时,才会执行该查询。

使用系统;

使用系统。集合。泛型;

使用系统。Linq

命名空间链接查询

{

班级计划

{

静态void Main(string[] args)

{

int[] number={ 2,4,6,8,10 };//获取数据源

ienumerablelow num=from n in number//创建并存储查询,不执行任何操作。

其中n 8

选择n;

Foreach(var val in lowNum) //执行查询

{

控制台。write(“{ 0 }”,val);

}

控制台。read key();

}

}

}

二、查询表达式的结构

表达式由查询体后的from子句组成,其子句必须按一定顺序出现,from子句和select子句是必需的。我先介绍一下条款。

2.1 from子句

from子句指定要用作数据源的数据集,其语法如下:

从项目中的类型项目

其中Type是集合中元素的类型,这是可选的,因为编译器可以从集合中推断出类型。Item是迭代变量的名称。Items是要查询的集合的名称,并且必须是可枚举类型。

它类似于foreach,但是foreach语句在遇到代码时执行它的主体,而two from子句什么也不做。它创建可执行的后台代码对象,只有当程序的控制流遇到访问查询变量的语句时,才会执行这些对象。

2.2  join子句

如果你熟悉SQL中的join,那么LINQ中的join对你来说并不难。如果不熟悉,就算了。

我们可以使用join来连接来自两个或更多集合的数据。它接受两个对象集,然后创建一个临时对象集。

var query=来自学生中的s

在s.SID等于c.SID的课程中加入c

Equals是用来比较相等性的字段,不能用“==”代替。在下面的例子中,有三个学生和三门课程。我们要做的是找到上过历史课的学生的名字。

使用系统;

使用系统。集合。泛型;

使用系统。Linq

使用系统。文本;

使用系统。线程。任务;

命名空间链接查询

{

班级计划

{

public Student//声明学生类

{

公共int stId//学生ID

公共字符串stuName//学生姓名

}

public course//声明课程类

{

公共int stId//学生ID

公共字符串courseName//课程名称

}

静态学生[]学生=新学生[]

{

新生{stId=1,stuName='jack'},

新生{stId=2,stuName='taylor'},

新生{stId=3,stuName='fleming'}

};

静态课程[]课程=新课程[]

{

新课程{stId=1,courseName='art'},

新课程{stId=2,courseName='art'},

新课程{stId=1,courseName='history'},

新课程{stId=3,courseName='history'},

新课程{stId=3,courseName='physics'},

};

静态void Main(string[] args)

{

//查询所有上过历史课的学生姓名。

var query=来自学生中的s

参加有关s.stId等于c.stId的课程

其中c.courseName=='history '

选择s.stuName

foreach(查询中字符串)

{

控制台。Write('{0} ',str);

}

控制台。read key();

}

}

}

输出杰克弗莱明

解释一下查询过程:它会用student中的对象依次与course中的所有对象进行比较,找出是否满足s.stid等于c.stid其中c.course name==' history '的要求。

stID

stuName

一个

插口

2

泰勒

佛兰芒人

stID

课程名称

一个

艺术

2

艺术

一个

历史

历史

物理学

也就是说,将(1,jack)与(1,art),(2,art)匹配.(3,物理学)分别,然后(2,泰勒)与(1,艺术),(2,艺术).(3,物理)直到全部匹配,最后你可以找到两个匹配。

2.3 let子句

let子句接受表达式的运算,并将其赋给需要在其他运算中使用的标识符。它是表单的一部分.让.碎片在哪里。

var query=来自a组中的a

来自b组的b

让总和=a b

其中总和12

选择new(a,b,sum);

2.4 where子句

Where子句根据后续操作删除不合格项。查询表达式可以有任意数量的where子句,并且项目必须满足所有where条件才能避免被筛选。它的语法是

其中BoolenExpression1

其中布尔表达式2

前面的例子已经用了很多次where,这里就不举例了。

2.5 orderby条款

Orderby可以轻松地对返回的数据进行排序。升序和降序是可选的。默认为升序。

语法:按表达式升序或降序排序

将orderby子句添加到join子句的示例中,返回的结果将变成fleming jack。

var query=来自学生中的s

参加有关s.stId等于c.stId的课程

其中c.courseName=='history '

按s.stuName//排序

选择s.stuName

2.6 group子句

Group子句允许您根据指定的键对select的结果进行分组。每个组由一个名为key的字段来区分。组本身是可枚举的,它的项也可以被枚举。

变量查询=来自学生中的学生

按学生专业对学生进行分组;

foreach(查询中的变量)

{

控制台。WriteLine(“{ 0 }”,s . key);

foreach(以秒为单位的变量t)

{

console . writeline(“{ 0 }”,t . Name);

}

}

2.7 select子句

Select子句指定应选择选定对象的哪一部分。您可以指定以下任一选项

答:整个数据项

b:数据项的一个字段。

c:数据项中由几个字段组成的新对象(或类似的其他值)。

var query=来自学生中的s

选择s;//整个数据项

var query=来自学生中的s

选择s.stuName//s中的字段

var query=来自a组中的a

来自b组的b

让总和=a b

其中总和12

选择new (a,b,sum);//由a、b和sum组成的新字段

2.8 查询延续: into子句

查询continuation子句可以接受查询结构的一部分并给它一个名称,这样就可以在查询的另一部分中使用它。

var someInt=来自a组中的a

来自b组的b

进入groupAandB

来自group a中的c b

选择c;

三、方法语法和查询语法

使用LINQ编写查询时,可以使用两种形式的语法:查询语法和方法语法。

答:方法语法:使用标准方法调用。这些方法是一组称为标准查询操作符的方法。

b:查询方法:看起来很像SQL语句,以查询表达式的形式编写。Microsoft建议使用查询语法,因为它更容易阅读。

在编译时,CLR会将查询语法转换为方法语法。

int[] num={ 2,4,6,8,10 };

num //查询语法中的Var numQuery=from number

其中8号

选择号码;

var numMethod=num。其中(x=x ^ 8);//方法语法

他们得到同样的结果。Lambda表达式用作方法语法中where的参数。

总结

这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • com组件初始化失败,c#开发com组件
  • 留言与评论(共有 条评论)
       
    验证码: