语言集成查询(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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。