Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IEnumerable与lt;t来源>;何处及;IQueryable<;t来源>;扩展方法在哪里_C#_.net_Linq_Lambda_Extension Methods - Fatal编程技术网

C# IEnumerable与lt;t来源>;何处及;IQueryable<;t来源>;扩展方法在哪里

C# IEnumerable与lt;t来源>;何处及;IQueryable<;t来源>;扩展方法在哪里,c#,.net,linq,lambda,extension-methods,C#,.net,Linq,Lambda,Extension Methods,两者之间的区别是什么 public static IEnumerable<TSource> Where<TSource> (this IEnumerable<TSource> source, Func<TSource, bool> predicate) 公共静态IEnumerable其中 (此IEnumerable源,Func谓词) 及 公共静态IQueryable,其中 (这是一个可靠的来源, 表达式(谓词) 这两种方法都可

两者之间的区别是什么

public static IEnumerable<TSource> Where<TSource>
        (this IEnumerable<TSource> source, Func<TSource, bool> predicate)
公共静态IEnumerable其中
(此IEnumerable源,Func谓词)

公共静态IQueryable,其中
(这是一个可靠的来源,
表达式(谓词)
这两种方法都可以以相同的方式接受lambda表达式

List<string> fruits =
                new List<string> { "apple", "passionfruit", "banana", "mango", 
                                "orange", "blueberry", "grape", "strawberry" };
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);
列出水果=
新名单{“苹果”、“西番莲”、“香蕉”、“芒果”,
“橘子”、“蓝莓”、“葡萄”、“草莓”};
IEnumerable query=fruits.Where(fruit=>fruit.Length<6);

为什么存在委托函数和委托函数的表达式?我必须注意它吗?

一个处理
IEnumerable
,另一个处理
IQueryable
,一个
IEnumerable
只是一个C项序列。
Select
IEnumerable
版本实际上只是在C#中通过输入
IEnumerable
中的项进行迭代,根据委托函数测试它们,并生成匹配的项

但是,
IQueryable
可以表示SQL表中的项。(或许多其他类型的数据源,但SQL可能是最常见的。)
Select
IQueryable
版本可以将表达式转换为SQL查询(或类似查询)的一部分,并将决定返回SQL server(或类似查询)的项的负担传递给SQL server


你真的不必担心这种区别——LINQ可以为你隐藏所有这些细节。如果要查询C#对象列表,它将使用
IEnumerable
版本;如果您通过Linq to SQL查询SQL,它将使用
IQueryable
版本。

当您有
IQueryable
时,最终使用的数据源(SqlServer或其他东西)尚未被查询,并且生成的SQL仍然可以通过附加条件进行修改


当您拥有一个
IEnumerable
时,可能的查询将具体化,您将只过滤集合。

O.R.Mapper的答案最充分、最简单。我想你需要检查的是你能找到的答案

List<string> fruits =
                new List<string> { "apple", "passionfruit", "banana", "mango", 
                                "orange", "blueberry", "grape", "strawberry" };
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);