2010-11-24 30 views
4

我看到一些代码被linq用于遍历c#中的字典对象。我认为linq只是针对数据库的linq to sql。在提到的代码中使用的linq是一个select类型的语句,只是没有数据库。linq与linq有何不同?

是否有LINQ没有LINQ到SQL数据库?那是没有“sql”的“linq”留在这里吗?我问,因为人们谈论的实体框架取代LINQ到SQL,但当然EF并没有取代使用我所描述的时尚的LINQ吗?你可以在字典对象上使用ef吗?希望发表评论。谢谢。

继承人在那里我看到了它:

How to find duplicate pairs in a Dictionary?

回答

6

的LINQ是一个基于.NET框架技术来查询对象(任何实现IEnumerable)。 Linq to SQL是对此的扩展,它允许您查询SQL Server数据库。

是的,Linq,没有SQL,在这里停留。这是一个神话般的技术。很长一段时间里,最好的事情之一,海事组织,从雷德蒙德出来。

3

LINQ本身主要只是一种模式,它支持语言扩展,如查询表达式。在List<T>等工作的实现通常被称为LINQ to Objects; LINQ to SQL和LINQ to EF是数据库的实现,通过IQueryable<T>Reactive Extensions提供了一个超过IObservable<T>IQbservable<T>的实现。并行扩展为ParallelQuery<T>提供了并行处理的实现。他们都只使用语言支持的模式 - 例如WhereSelect等方法,并使用可以从lambda表达式创建的适当参数。

请注意,LINQ to XML在这里有点奇怪 - 它是而不是 LINQ提供程序本身;它只是一个XML API,它对LINQ to Objects特别有效。

3

这有时被称为“对象的LINQ”,但是,是的,LINQ框架本身就在这里,并且是LINQ-to-SQL和LINQ-to-Entities/Entity Framework的基础。

LINQ通过在IEnumerable<T>IQueryable<T>上执行扩展方法工作。凡是实现了IEnumerable<T>(即所有通用集合[具有可用于非通用集合的转换])都可以用作LINQ查询的源。

5

LINQ的全称是 “语言集成查询” 并不仅仅是一种方法来查询SQL数据库:

http://msdn.microsoft.com/en-us/library/bb397926.aspx

从上面的链接:

LINQ引入了标准,easily-学习查询和更新数据的模式,并且该技术可以扩展为支持任何类型的数据存储。

LINQ现在已经遍布.NET框架,正如您在您的问题中提到的,可用于针对本机通用集合类型。对我来说,这完全改变了我如何写代码:

List<int> myIntList = new List<int>(); 
.... populate with some data 
myFilteredIntList = myIntList.Where(i => i > 10); 

除了LINQ to SQL中,有LINQ到对象,LINQ到XML,和LINQ to ADO.net。微软一直在大力投资LINQ功能集,并且这里仍然存在......据说,LINQ-to-SQL看起来最终会退出,转而支持LINQ to ADO.Net(也称为作为Linq to Entities): http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx