2010-12-14 52 views
-2

LINQ中的IEnumerable和IQuearable有什么区别?我阅读了更多关于这方面的文章,但我不理解实际情况。asp.net中的LINQ

+6

事实上,**接受一些答案** - 直到你的.. [IQueryable的和IEnumerable 之间的区别是什么?(HTTP – 2010-12-14 09:44:32

+0

可能重复,我会删除我的答案://计算器.com/questions/252785/what-is-the-difference-between-iqueryablet-and-ienumerablet) – 2011-01-16 18:42:48

+0

People!这个问题不可能是不可思议的。尽职尽责。 – 2011-01-16 18:44:22

回答

0

IEnumerable和IQueryable是任何LINQ讨论中最常用的两个术语。我想在这里试图根据他们的行为来简化两个接口。在LINQ世界中,我们通常在.NET Framework中有很少的提供者可用,比如LINQ to Object,LINQ to SQL,LINQ to XML。

这是一条声明,每个LINQ语句都返回IEnumerable。 IEnumerable按步骤工作。意思是,当你写,

var q = from a in b 

      where a > 5 

      select a; 

它创建了一个清单出来“B”因“其中”然后创建另一个列表“选择”。这是LINQ to Object和LINQ to XML的行为。

当您使用LINQ to SQL时,它使用IQueryable。该接口继承自IEnumerable,但通常任何LINQ to SQL都会在后端生成T-SQL,以便能够为我们获取数据。这一次评估并生成查询,并为我们提供了整个数据。

What is the difference between IQueryable<T> and IEnumerable<T>?

0

的IEnumerable意味着我可以返回T.

的项目

的IQueryable意味着我可以返回的T项目,但我还可以接受LINQ操作(其中,选择等),我会处理并转换为无论是在幕后提供数据。

现在当然IEnumerable看起来像它也接受LINQ操作,但不同之处在于它们从来没有被翻译过,而是只是在内存中执行。例如Where运算符只是做这样的事情:

T式(IEnumerable的值,Func键谓语) { 的foreach(中值VAR值) 如果(谓词(值)) 产量的返回值; }