IQueryable 和 IEnumable

public class student { public string Name { get; set; } public int Id { get; set; } }
  var st =    new  List<student>();
  var result= st.Where(t=>t.Id>2);

这里的result 是IEnumable<student>。 执行这个where 不会耗时间,因为这里不执行实际的操作,只是把这个 lamda表达式封装了一层,封装为一个委托,待以后foraech 的时候使用。

这个无法拼接。如果不改变上面的代码,不能在这个之后,把 st.Where(t=>t.name.Length>2); 也拼进去。只能在foreach 的时候处理了。

-----------------------------------------------------------------------------------------------------------------------

using (var context = new MonitorDBContext("Server=DESKTOP-H32IVT0\\SQLEXPRESS;uid=sa;pwd=---;Database=MonitorDB;"))
            {
                context.Users.Add(new User { Name="老王",Email="qqqq@qq.com"});
                context.SaveChanges();
                var users = context.Users.Where(t=>t.Id>2);
                Console.WriteLine("{0,6}   {1,5}   {2,20}", "ID", "Name", "Email");
                foreach (var user in users)
                {
                    Console.WriteLine("{0,6}   {1,5}   {2,20}", user.Id, user.Name, user.Email);
                }
                Console.ReadKey();
            }

上面加红的代码 这个users 是 IQueryable<user> 类型的。这句的执行也是不耗时间的。这只是把这个lamda表达式封装了一层,封装为一个Expression.而不是一个委托。这个Expression可以拼装,在这句后,接着写 where , orderby等。

IQueryable<T>类型,继承了IEnumable<T>,就是也可以foreach.他有四个属性,其中一个是IEnumable<T>的。另外的是IQueryable 

 public interface IQueryable : IEnumerable
    {
        Expression Expression { get; }
        Type ElementType { get; }
        IQueryProvider Provider { get; }

    }

可以调试状态看这几个到底什么值。












 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值