IQueryable和IEnumerable的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lenkty/article/details/78044217
      在使用Linq查询数据的时候,有linq to sql,linq to object,linq to entity 查询返回的结果有两种类型:IQueryable、IEnumerable,两者内部的处理机制完全不同。 
 在System.linq命名空间,有两个静态类:Queryable和Enumerable。
  
 .在System.linq.Enumerable中,参数接收的是一个谓词表达式,也就是一个委托,Func<>委托一旦调用,就立即执行了,将执行结果保存在内存中,返回IEnumerable。
    string[] words = {"there", "is", "no", "one", "i", "would", "rather", "be", "than", "me"};
    var myre = words.Where((p, i) => p.Contains("o") && i%2 != 0);
    form1.InnerHtml +=string.Join(",", myresult2.ToArray());

 .在System.linq.Queryable中,参数接收的是一个表达式类型,Expression是一个表达式,会存储拼接表达式树,直到在运行期最终执行。返回IQueryable
DataTable dataTable = new DataTable();
DataColumn dataColumnA = new DataColumn("A", typeof(int));
DataColumn dataColumnB = new DataColumn("B", typeof(string));
DataColumn dataColumnC = new DataColumn("C", typeof(bool));
DataColumn dataColumnD = new DataColumn("D", typeof(object));
dataTable.Columns.Add(dataColumnA);
dataTable.Columns.Add(dataColumnB);
dataTable.Columns.Add(dataColumnC);
dataTable.Columns.Add(dataColumnD);
for (int i = 0; i < 10; i++)
{
DataRow dataRow = dataTable.NewRow();
dataRow[dataColumnA] = i;
dataRow[dataColumnB] = i + "zoooo";
dataRow[dataColumnC] = (i % 2 == 0);
dataRow[dataColumnD] = dataTable.GetHashCode();
dataTable.Rows.Add(dataRow);
}
//IQueryable 先生成表达式树,使用时才查询需要的值,如下foreach才开始查询
var newDatas = dataTable.AsEnumerable().AsQueryable();//IQueryable继承IEnumerable
var Result = newDatas.Where(dr => dr.Field<bool>("C") == true);


foreach (DataRow dr in Result)
{
form1.InnerHtml += dr["B"]+"-";
}
  


--任何问题沟通请发送邮件到:[email protected]或加入qq群594096777讨论。


猜你喜欢

转载自blog.csdn.net/lenkty/article/details/78044217