LINQ语句中的.linq asenumerablee 和 AsQueryable的区别

LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() 。
string strcon = &Data Source=.//SQLEXPRESS;Initial Catalog=Db_EPersist Security Info=TUser ID=Password=sa&;
SqlConnection con = new SqlConnection(strcon);
con.Open();
string strsql = &select * from SC,Course o&;
SqlDataAdapter da = new SqlDataAdapter(strsql,con);
DataSet ds = new DataSet();
da.Fill(ds, &mytable&);
DataTable tables=ds.Tables[&mytable&]; //创建表
var dslp = from d in tables.AsEnumerable()//执行LINQ语句,这里的.AsEnumerable()是延迟发生,不会立即执行,实际上什么都没有发生
foreach(var res in dslp)
Response.Write(res.Field&string&(&Cname&).ToString());
上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作。
AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例如调用:First, Single, ToList….的时候)才执行。
下面就是.AsEnumerable()与相对应的.AsQueryable()的区别:
.AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。
AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。
AsEnumerable()延迟执行,不会立即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
ToList()立即执行
当你需要操作结果的时候,用.ToList(),否则,如果仅仅是用来查询不需要进一步使用结果集,并可以延迟执行,就用 .AsEnumerable()/IEnumerable /IQueryable
AsEnumerable()虽然延迟执行,但还是访问数据库,而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时,部门可以先取出放置在List中,然后再依次取出各个部门的员工,这时访问的效率要高一些,因为不需要每次都访问数据库去取出部门。
IQueryable实现了IEnumberable接口。但
IEnumerable&T&换成
IQueryable&T&后速度提高很多。原因:
IQueryable接口与IEnumberable接口的区别:
IEnumerable&T&泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而
IQueryable&T&是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
IEnumerable跑的是Linq to Object,强制从数据库中读取所有数据到内存先。
Resource Reference
http://blog.csdn.net/thebesttome/article/details/7549262
最新教程周点击榜
微信扫一扫LINQ语句中的.AsEnumerable()&和&.AsQueryable()的区别
在写LINQ语句的时候,往往会看到.AsEnumerable()
和 .AsQueryable() 。
string strcon = "Data Source=.\\SQLEXPRESS;Initial Catalog=Db_EPersist Security Info=TUser ID=Password=sa";
SqlConnection con = new SqlConnection(strcon);
con.Open();string strsql = "select * from SC,Course o";
SqlDataAdapter da = new SqlDataAdapter(strsql,con);
DataSet ds = new DataSet();
da.Fill(ds, "mytable");
DataTable tables=ds.Tables["mytable"]; //创建表var dslp = from d in tables.AsEnumerable()//执行LINQ语句,这里的.AsEnumerable()是延迟发生,不会立即执行,实际上什么都没有发生foreach(var res in dslp)
Response.Write(res.Field&&/SPAN&string&("Cname").ToString());
上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ
进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable
方法返回一个泛型的对象以支持LINQ 的查询操作。
.AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例如调用:First,
Single, ToList....的时候)才执行。
下面就是.AsEnumerable()与相对应的.AsQueryable()的区别:
AsEnumerable将一个序列向上转换为一个IEnumerable,
强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。
AsQueryable将一个序列向下转换为一个IQueryable,
它生成了一个本地查询的IQueryable包装。
.AsEnumerable()延迟执行,不会立即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
.ToList()立即执行
当你需要操作结果的时候,用.ToList(),否则,如果仅仅是用来查询不需要进一步使用结果集,并可以延迟执行,就用.AsEnumerable()/IEnumerable&/IQueryable
.AsEnumerable()虽然延迟执行,但还是访问数据库,而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时,部门可以先取出放置在List中,然后再依次取出各个部门的员工,这时访问的效率要高一些,因为不需要每次都访问数据库去取出部门。
IQueryable实现了IEnumberable接口。但IEnumerable
换成IQueryable后速度提高很多。原因:
IQueryable接口与IEnumberable接口的区别:&
IEnumerable 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable
是将Skip ,take
这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
IEnumerable跑的是Linq
to Object,强制从数据库中读取所有数据到内存先。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。LINQ语句中的.AsEnumerable 和 AsQueryable的区别_百度知道
LINQ语句中的.AsEnumerable 和 AsQueryable的区别
提问者采纳
Open();T&gt.Add(&SQLEXPRESS。多次调用 AsEnumerable 方法将返回多个独立的可查询对象;
table,因此您必须调用AsEnumerable 方法来将 DataTable 用作 LINQ 查询的From 子句中的源,因为不需要每次都访问数据库去取出部门。语言集成查询 (LINQ) 查询适用于实现IEnumerable&lt,不会立即执行。MSDN;
IQueryable&T&
).AddRange(resultList)。原因.Add(&
return lst。但IEnumerable&lt。[csharp] view plaincopyusing System: &quot.\) remark = &), &T&gt, Single.AsEnumerable()延迟执行;&#47,con);T&
Program inst = new Program(); 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了; resultList = from x in _dataDicList
T&).CRemaks2 == remark
foreach (string productName in productNames) {
CIEnumerable /string&gt.Rows.AsEnumerable()虽然延迟执行,Course where SC.AsEnumerable() select d, ToLUser ID= && 换成IQueryable&lt,如果仅仅是用来查询不需要进一步使用结果集.AsEnumerable()是延迟执行的;
Console,LINQ 不能直接从数据集对象中查询;); 接口或IQueryable 接口的数据源;
static void Main(string[] args) {
DataTable table = new DataTable();Product Names,实际上什么都没有发生;Cname&quot。,实际上什么都没有发生
foreach(var res in dslp)
R;0&quot.的时候)才执行;TbaDatadic&gt。您也可以通过返回 IEnumerable&lt,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作;)。下面就是。AsEnumerable 方法返回的可枚举对象永久绑定到产生它的DataTable.Add(&quot, string remark)
if (remark .NewList();select * from SC,实际上什么都没有发生;.AsQueryable()的区别。;IQueryable.DisplayProducts(table);&#92.Field&lt.CDatagroup ==
dicGroup && x。此对象可用在 LINQ 表达式或方法查询中;
var lst = TbaDatadicLProductName&。例如;3&quot.AsEnumerable()与相对应的.ToString()),它并不是把所有数据都加载到内存里来才进行条件过滤,当真正使用对象的时候(例如调用。比如我们需要显示两个部门的员工时;
上述代码使用LINQ 针对数据集中的数据进行筛选和整理.Add(& 是将Skip .WriteLine(&quot.Columns.AsEnumerable()是延迟发生;);Password=sa&
table.Tables[&.。IQueryable实现了IEnumberable接口;
SqlConnection con = new SqlConnection(strcon),就用;1&quot,不会立即执行.RT&gt!= &quot,但还是访问数据库.AsQueryable() 。当你调用;Chai&quot.AsEnumerable() select products,强制从数据库中读取所有数据到内存先.;
string strsql = &o&;
using Smytable& 对象;1&quot, &quot。AsQueryable将一个序列向下转换为一个IQueryable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中.ToList()立即执行当你需要操作结果的时候,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令:
IEnumerable&lt,其泛型参数T 为 DataRT&执行LINQ语句.WriteLine(productName);string&gt.R); /ProductName&ID&quot,否则;/
项目中用到的IQueryable internal TbaDatadicList GetLookUpList(string dicG
(&quot.ToList()直接取得结果放在内存中:IQueryable接口与IEnumberable接口的区别,部门可以先取出放置在List中.Fill(ds,而.AsEnumerable()&#47.Field&Tofu&
DataSet ds = new DataSet();Queso Cabrales&quot,这些对象全部绑定到源DataT2&quot:[csharp] view plaincopystring strcon = &quot。 该 DataTable 类不实现上述任何一个接口;创建表
var dslp = from d in tables, &
SqlDataAdapter da = new SqlDataAdapter()。在使用LINQ 进行数据集操作时。IEnumerable跑的是Linq to Object.Columns, &],同样能够以一种面向对象的思想进行数据集中数据的筛选,用,这时访问的效率要高一些.,然后再依次取出各个部门的员工.AsEnumerable()的时候,并可以延迟执行.Cno=Cmytable&
da.ToList();/.Add(&quot:AsEnumerable将一个序列向上转换为一个IE(&
class Program {
public void DisplayProducts(DataTable table) {
var productNames = from products in table,因为数据集对象不支持LINQ 查询.Data:返回一个IEnumerable&lt,这里的;
DataTable tables=Persist Security Info=True:FData Source=; 对象来获取特定于域的自定义运算符(如CopyToDataTable),往往会看到,而IQueryable&后速度提高很多;1&quot, 它生成了一个本地查询的IQueryable包装.Write(res.AsEnumerable() 和 ;);Initial Catalog=Db_Example。.Clone()在写LINQ语句的时候
电子产品技术支持
其他类似问题
为您推荐:
linq的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁7603人阅读
在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() 。
string strcon = &Data Source=.\\SQLEXPRESS;Initial Catalog=Db_EPersist Security Info=TUser ID=Password=sa&;
SqlConnection con = new SqlConnection(strcon);
con.Open();
string strsql = &select * from SC,Course o&;
SqlDataAdapter da = new SqlDataAdapter(strsql,con);
DataSet ds = new DataSet();
da.Fill(ds, &mytable&);
DataTable tables=ds.Tables[&mytable&]; //创建表
var dslp = from d in tables.AsEnumerable()//执行LINQ语句,这里的.AsEnumerable()是延迟发生,不会立即执行,实际上什么都没有发生
foreach(var res in dslp)
Response.Write(res.Field&string&(&Cname&).ToString());
&&&&&& 上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作。
.AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例如调用:First, Single, ToList....的时候)才执行。
下面就是.AsEnumerable()与相对应的.AsQueryable()的区别:
AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。
AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。
.AsEnumerable()延迟执行,不会立即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
.ToList()立即执行
当你需要操作结果的时候,用.ToList(),否则,如果仅仅是用来查询不需要进一步使用结果集,并可以延迟执行,就用.AsEnumerable()/IEnumerable&/IQueryable
.AsEnumerable()虽然延迟执行,但还是访问数据库,而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时,部门可以先取出放置在List中,然后再依次取出各个部门的员工,这时访问的效率要高一些,因为不需要每次都访问数据库去取出部门。
IQueryable实现了IEnumberable接口。但IEnumerable&T& 换成IQueryable&T&后速度提高很多。原因:
IQueryable接口与IEnumberable接口的区别:& IEnumerable&T& 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable&T& 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
IEnumerable跑的是Linq to Object,强制从数据库中读取所有数据到内存先。
返回一个 对象,其泛型参数T
为 。此对象可用在 LINQ 表达式或方法查询中。
语言集成查询 (LINQ) 查询适用于实现 接口或IQueryable
接口的数据源。
类不实现上述任何一个接口,因此您必须调用AsEnumerable 方法来将
用作 LINQ 查询的From 子句中的源。您也可以通过返回
对象来获取特定于域的自定义运算符(如)。
AsEnumerable 方法返回的可枚举对象永久绑定到产生它的。多次调用
AsEnumerable 方法将返回多个独立的可查询对象,这些对象全部绑定到源。
using System.D
class Program {
public void DisplayProducts(DataTable table) {
var productNames = from products in table.AsEnumerable() select products.Field&string&(&ProductName&);
Console.WriteLine(&Product Names: &);
foreach (string productName in productNames) {
Console.WriteLine(productName);
static void Main(string[] args) {
DataTable table = new DataTable();
table.Columns.Add(&ID&);
table.Columns.Add(&ProductName&);
table.Rows.Add(&1&, &Chai&);
table.Rows.Add(&2&, &Queso Cabrales&);
table.Rows.Add(&3&, &Tofu&);
Program inst = new Program();
inst.DisplayProducts(table);
项目中用到的IQueryable
&internal TbaDatadicList GetLookUpList(string dicGroup, string remark)
&&&&&&&&&&& if (remark != &0& && remark != &1&) remark = &1&;
&&&&&&&&&&& IQueryable&TbaDatadic& resultList = from x in _dataDicList
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& where x.CDatagroup ==& dicGroup && x.CRemaks2 == remark
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& var lst = TbaDatadicList.NewList();
&&&&&&&&&&& lst.AddRange(resultList);
&&&&&&&&&&& return lst.Clone();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:209188次
积分:2401
积分:2401
排名:第11021名
原创:24篇
转载:73篇
评论:29条
(1)(1)(1)(2)(1)(1)(1)(1)(3)(3)(2)(1)(3)(2)(1)(2)(4)(2)(2)(5)(3)(11)(8)(4)(1)(1)(3)(4)(4)(14)(3)(2)using (testContext context = new testContext()){&&&&var query = (from item in context.Users.AsQueryable()&&&&&&&&&&&&&&&&&&&&where item.id & 10&&&&&&&&&&&&&&&&&&&&select item.id).ToList();&&&&var query2 = (from item in context.Users.AsEnumerable()&&&&&&&&&&&&&&&&&&&&where item.id & 10&&&&&&&&&&&&&&&&&&&&select item.id).ToList();}
服务器端sql:
--AsQueryableSelect [Extent1].[id] AS [id]FROM [dbo].[User] AS [Extent1]Where [Extent1].[id] & 10--AsEnumerableSelect [Extent1].[id] AS [id], [Extent1].[usn] AS [usn], [Extent1].[pwd] AS [pwd], [Extent1].[created] AS [created]FROM [dbo].[User] AS [Extent1]
using (testContext context = new testContext()){&&&&var query = (from item in context.Users.AsQueryable()&&&&&&&&&&&&&&&&&&&&where item.id & 10&&&&&&&&&&&&&&&&&&&&orderby item.id ascending&&&&&&&&&&&&&&&&&&&&select item.id).Skip(20).Take(20).ToList();&&&&var query2 = (from item in context.Users.AsEnumerable()&&&&&&&&&&&&&&&&&&&&where item.id & 10&&&&&&&&&&&&&&&&&&&&orderby item.id ascending&&&&&&&&&&&&&&&&&&&&select item.id).Skip(20).Take(20).ToList();}
服务器端sql:
--AsQueryableSelect TOP (20) [Filter1].[id] AS [id]FROM ( Select [Extent1].[id] AS [id], row_number() OVER (ORDER BY [Extent1].[id] ASC) AS [row_number]&&&&FROM [dbo].[User] AS [Extent1]&&&&Where [Extent1].[id] & 10)&&AS [Filter1]Where [Filter1].[row_number] & 20orDER BY [Filter1].[id] ASC--AsEnumerableSelect [Extent1].[id] AS [id], [Extent1].[usn] AS [usn], [Extent1].[pwd] AS [pwd], [Extent1].[created] AS [created]FROM [dbo].[User] AS [Extent1]
AsQueryable是在数据库中查询再返回数据,AsEnumerable是从数据库读取全部数据再在程序中查询,其效果和ToList相同。
string&strcon&=&"Data&Source=.\\SQLEXPRESS;Initial&Catalog=Db_EPersist&Security&Info=TUser&ID=Password=sa";&&
SqlConnection&con&=&new&SqlConnection(strcon);&&
con.Open();&&
string&strsql&=&"select&*&from&SC,Course&where&o";&&
SqlDataAdapter&da&=&new&SqlDataAdapter(strsql,con);&&
DataSet&ds&=&new&DataSet();&&
da.Fill(ds,&"mytable");&&
DataTable&tables=ds.Tables["mytable"];&
var&dslp&=&from&d&in&tables.AsEnumerable()&select&d;
foreach(var&res&in&dslp)&&&&&&&&&&&&&&&&&&
&&&&&Response.Write(res.Field&string&("Cname").ToString());&&
上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选。在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作。
.AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例如调用:First, Single, ToList....的时候)才执行。下面就是.AsEnumerable()与相对应的.AsQueryable()的区别:AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。
.AsEnumerable()延迟执行,不会立即执行。当你调用.AsEnumerable()的时候,实际上什么都没有发生。
.ToList()立即执行
当你需要操作结果的时候,用.ToList(),否则,如果仅仅是用来查询不需要进一步使用结果集,并可以延迟执行,就用.AsEnumerable()/IEnumerable&/IQueryable
.AsEnumerable()虽然延迟执行,但还是访问数据库,而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时,部门可以先取出放置在List中,然后再依次取出各个部门的员工,这时访问的效率要高一些,因为不需要每次都访问数据库去取出部门。
IQueryable实现了IEnumberable接口。但IEnumerable&T& 换成IQueryable&T&后速度提高很多。原因:
IQueryable接口与IEnumberable接口的区别:& IEnumerable&T& 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable&T& 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
IEnumerable跑的是Linq to Object,强制从数据库中读取所有数据到内存先。
using&System.D&&
class&Program&{&&
&&&public&void&DisplayProducts(DataTable&table)&{&&
&&&&&&var&productNames&=&from&products&in&table.AsEnumerable()&select&products.Field&string&("ProductName");&&
&&&&&&Console.WriteLine("Product&Names:&");&&
&&&&&&foreach&(string&productName&in&productNames)&{&&
&&&&&&&&&Console.WriteLine(productName);&&
&&&static&void&Main(string[]&args)&{&&
&&&&&&DataTable&table&=&new&DataTable();&&
&&&&&&table.Columns.Add("ID");&&
&&&&&&table.Columns.Add("ProductName");&&
&&&&&&table.Rows.Add("1",&"Chai");&&
&&&&&&table.Rows.Add("2",&"Queso&Cabrales");&&
&&&&&&table.Rows.Add("3",&"Tofu");&&
&&&&&&Program&inst&=&new&Program();&&
&&&&&&inst.DisplayProducts(table);&&
返回一个 对象,其泛型参数T
为 。此对象可用在 LINQ 表达式或方法查询中。
语言集成查询 (LINQ) 查询适用于实现 接口或IQueryable
接口的数据源。
类不实现上述任何一个接口,因此您必须调用AsEnumerable 方法来将
用作 LINQ 查询的From 子句中的源。您也可以通过返回
对象来获取特定于域的自定义运算符(如)。
AsEnumerable 方法返回的可枚举对象永久绑定到产生它的。多次调用 AsEnumerable 方法将返回多个独立的可查询对象,这些对象全部绑定到源。
阅读(...) 评论()

我要回帖

更多关于 linq修改语句 的文章

 

随机推荐