IQueryable和IEnumerable的使用

      在使用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"]+"-";
}
  

--任何问题沟通加入qq群594096777讨论。

更多信息请查看 个人博客 或者关注公众号:Z技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值