IQueryable 和 IEnumable
IQueryable 和 IEnumable
2018年04月11日 15:27:07 qgbooooo 阅读数 526更多
分类专栏: C# 底层
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qqqgg/article/details/79896859
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; }
}
可以调试状态看这几个到底什么值。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 上周热点回顾(1.20-1.26)
· 【译】.NET 升级助手现在支持升级到集中式包管理