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);