什么是LINQ?西溪带你去学习LINQ
类型:数据库类大小:1.7M语言:英语评分:5.0标签:立即下载LINQ,Language INtegrated Query是c#和Visual Basic语言的一套扩展。它允许编写C#或Visual Basic代码,以与查询数据库相同的方式操作内存数据。
LINQ是一个数据访问的编程模型。NET语言直接支持数据查询。LINQ的目标是降低访问数据的复杂性。LINQ可以统一访问不同类型的数据,可以使用数据作为对象,可以更好地与建模集成,并且可以在Visual Studio中进行智能提示。
LINQ可以为SQL Server提供对象到关系的映射。此外,LINQ可以将单个类映射到多个表或视图,并且可以执行存储查询和实体查询。
要学好LINQ查询语法,我们必须首先了解C# 3.0的一些新特性:
隐式局部变量var age=26var username='朱烨';var userlist=new [] {'a ',' b ',' c ' };foreach(用户列表中的变量用户)控制台。WriteLine(用户);告诉编译器(对于CLR,你用var它不会知道,编译器给苦力),自己推断它的类型。我不在乎。但是,由于编译器会推断类型,因此在声明类型时必须对其进行赋值,并且不能为空值。请注意,这只能用于局部变量,不能用于字段。
匿名类型vardata=new {username='朱烨',age=26 };控制台。WriteLine(' username : { 0 } age : { 1 } ',data.username,data . age);匿名类型允许开发人员定义内联类型,而无需显式定义它们。var通常与var结合使用,用于声明匿名类型。在LINQ查询语法中定义临时匿名类型是非常常见的,我们可以很容易地实现对象的转换和投影。
扩展方法公共静态类助手{公共静态字符串md5hash(此字符串)返回系统。web . security . formsauthentication . hashpasswordfortringinfigfile(s,' MD5 ');}公共静态bool In(此对象o,IEnumerable b) { foreach(对象obj in b) { if(obj==o)返回true}返回false} }//调用扩展方法console.writeline ('123456 '。MD5 hash());控制台。WriteLine('1 '。In(new[]{'1 ',' 2 ',' 3 ' });很多时候,我们需要对CLR类型做一些操作,所以不能扩展CLR类型的方法。我们只能创建一些助手方法或生成子类。扩展的方法满足了这些要求,也是实现LINQ的基础。定义扩展方法时,需要注意的是只能在静态类中定义,并且是静态方法。如果扩展方法名与原始方法名冲突,扩展方法将无效。
自动属性公共类person { public string username { get;受保护的集合;} public int age { get设置;} public Person() { this.username='朱烨';} } Person p=new Person();//p . username=' aa ';控制台。write line(p . username);意义不是很大,纯粹解决机械劳动。编译器会自动为您生成get和set操作以及字段,您不能使用字段或自定义get和set操作,但可以分别定义get和set的访问级别。
对象初始值设定项公共类person { public string username { get;设置;} public int age { get设置;}公共重写字符串ToString() {返回字符串。格式(' username:{0} age:{1} ',this.username,this . age);} } Person p=new Person(){ username='朱烨',年龄=26 };控制台。write line(p . ToString());编译器会自动为你做setter操作,让原来几行的属性赋值操作可以一行完成。这里需要注意的是,只允许分配一些属性,包括内部访问级别,可以结合构造函数使用,构造函数初始化在对象初始化器之前执行
集合初始值设定项公共类person { public string username { get;设置;} public int age { get设置;}公共重写字符串ToString() {返回字符串。格式(' username:{0} age:{1} ',this.username,this . age);} } var persons=new List { new Person { username=' a ',age=1},new Person {username='b ',age=2 } }每个人的风险值)控制台。write line(p . ToString());编译器会自动为您插入集合。如果初始化Hashtable,相当于使用两个对象初始值设定项。
Lambda表达式var list=new [] {'aa ',' bb ',' AC ' };变量结果=数组。FindAll(list,s=(s . IndexOf(' a ')-1));foreach(结果中的变量)控制台。write line(v);事实上,它类似于2.0中的匿名方法,用于生成内联方法,只是Lambda表达式的语法更简单。语法如下:(参数列表)=表达式或语句块,其中:参数个数:可以有多个参数,一个参数,也可以没有参数。表达式或语句块:这部分是我们通常编写的函数的实现部分(函数体)。前面的例子是一个参数的例子,下面是一个结合了扩展方法的复杂例子:public delegate int mydg (int a,int b);public static类LambdaTest { public static int oper(this int a,int b,mydg dg) { return dg(a,b);} }控制台。WriteLine(1.oper(2,(a,b)=a b));控制台。WriteLine(2.oper(1,(a,b)=a-b));
查询语法var persons=new list { new person {username=' a ',age=19},new person {username=' b ',age=20},new person { username=' a ',age=21},};var selectperson=from p在p.age=20的人中选择p . username . Toupper();控制台。write line(p);
当使用标准LINQ查询运算符来表示查询时,查询语法是一种方便的声明性简化编写方法。这种语法在用代码表达查询时可以提高可读性和简洁性,并且易于正确读写。Visual Studio为查询语法提供完整的智能感知和编译时检查支持。在底层,编译器将查询语法的表达式翻译成显式的方法调用代码,通过新的扩展方法和Lambda表达式语言特性实现。上面的查询语法相当于下面的代码:var select person=persons。其中(p=p.age=20)。select(p=p . username . toupper());
LINQ查询语法可以实现T-SQL 90%以上的功能(因为T-SQL是基于二维表的,所以LINQ的查询语法比T-SQL更简单、更灵活),但是由于智能归纳,一开始就无法输入select。
从技术上讲,LINQ定义了大约40个查询操作符,如select、from、in、where和order by(在c #中)。这些运算符可用于编写查询语句。但是,这些查询也可以基于许多类型的数据,并且每种数据类型都需要单独的LINQ类型。
版权声明:什么是LINQ?西溪带你去学习LINQ是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















