什么是LINQ?我知道它适用于数据库,但它有什么作用?
LINQ代表语言集成查询。
Microsoft语言开发人员提供了一种直接在其语言中表达查询的方法(例如C#和Visual Basic),而不是编写YAQL(又一种查询语言)。形成这些查询的技术不依赖于被查询事物的实现细节,因此您可以针对许多目标(数据库,内存中对象,XML)编写有效查询,而实际上不考虑其中的基本方式。查询将被执行。
让我们从属于.NET Framework(3.5)的部分开始探索。
IEnumerable<T>
,允许以类型安全的方式查询任何类型的loopable集合。这些查询依赖于编译的.NET方法,而不是表达式。IQueryable<T>
,允许构建可由底层实现转换的表达式树。DataContext
。这是由C#团队构建的DataAccess技术。它只是有效。ObjectContext
。这是由ADO.NET团队构建的DataAccess技术。它比LINQ To SQL复杂,强大且难以使用。System.Xml
的东西不满意。因此,微软重新编写了它并利用重写来介绍一些方法,这些方法可以更容易地使用LINQ To Objects对抗XML。以上所有内容都是.NET Framework的一部分,可以从任何.NET语言(VB.NET,C#,IronPython,COBOL .NET等)获得。
好的,关于语言功能。我会坚持使用C#,因为这是我最了解的。 VB.NET也有几个类似的改进(和一些C#没有得到的 - XML文字)。这是一个简短且不完整的清单。
IEnumerable<string> result =
from c in myCustomers
where c.Name.StartsWith("B")
select c.Name;
System.Linq.Expressions.Expression
。你真的需要了解这些才能很好地使用Linq。有三个部分:参数列表,箭头和方法体。
IEnumerable<string> result = myCustomers
.Where(c => c.Name.StartsWith("B"))
.Select(c => c.Name);`
myCustomers.Select(c => new
{
Name = c.Name;
Age = c.Age;
})
// The compiler will determine that names is an IEnumerable<string>
var names = myCustomers.Select(c => c.Name);
LINQ(语言集成查询)可以参考:
组分可以单独使用或组合使用。
简而言之,LINQ(语言集成查询)允许您直接在代码中编写查询。这些查询可以在关系数据库上,也可以在XML或内存容器对象(如数组和列表)上。有关更多信息,请访问MSDN库:http://msdn.microsoft.com/en-us/library/bb308959.aspx
我将尝试一个简单的答案:LINQ是一种使用类似于SQL但可以在.NET应用程序内编译的查询语言来查询数据库(或其他数据存储区,XML等)的方法。
LINQ代表Language Integrated Query,是一种在CLR中提供通用“查询”机制的方法。
在它最基本的层面上,它由IEnumerable <T>上的一组方法组成 - 例如,Select,Sum,Where--可用于限制,投影等[1]
为了更进一步,LINQ还定义了一个新的LINQ提供程序模型,它可以使用表达式树并使用它来对CLR外部的数据源运行“本机”查询 - 例如,LINQ to SQL,LINQ to XML,LINQ到NHibernate等
C#和VB.NET还定义了一种查询语法,允许您编写内联强类型查询(看起来非常类似于SQL),然后编译器将其转换为等效的IEnumerable <T>调用。
对我来说,关于LINQ最有趣的事情是支持它所需的所有C#和VB.NET功能本身都很有用。扩展方法,匿名类型,lambda表达式和隐式类型都需要支持LINQ - 但我们倾向于在纯LINQ上下文之外使用这些功能。
[1]这些是关系术语,功能程序员可能更喜欢Map,Reduce,Fold等。
LINQ是一种使用从C#编程语言派生的习语来提取数据的技术。虽然它在SQL的功能设计中有很多,但它基本上是它自己的数据查询语言。它适用于广泛的数据源(SQL数据库,内存表示,XML等)。特别是,LINQ-To-SQL应该被视为与嵌入式SQL的传统使用形成对比,后者在SQL编程和C#/ VB编程之间经常被称为“阻抗不匹配”。
有关LINQ及其局限性的讨论,您可能需要查看这个相关问题:Doesn’t LINQ to SQL miss the point?
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
“LINQ项目是.NET Framework的一组扩展的代号,包括语言集成的查询,设置和转换操作。它使用本地语言语法扩展C#和Visual Basic,并提供类库以利用这些能力。“