该用 IList<T> 时是需立刻加载全部数据并反复索引、修改或统计;它代表已执行查询的可变内存列表,支持 Count、索引器和增删操作,而 IQueryable<T> 和 IEnumerable<T> 不支持。

c# ienumerable 和 ilist 和 iqueryable 的区别

什么时候该用 IList<T>?——需要立刻拿到全部数据并反复操作

当你明确知道后续要多次访问、修改、索引(比如 list[5])、统计数量(Count)或增删元素时,IList<T> 是最直接的选择。它代表一个「已加载到内存的、可变的列表」。

IQueryable<T>IEnumerable<T> 看起来都能写 .Where(),到底差在哪?

表面一样,底层完全两回事:一个是「把条件发给数据库执行」,一个是「把全部数据拉到内存再筛」。

为什么不能把 IQueryable<T> 当作 IList<T> 直接传参?

因为它们生命周期和语义完全不同:一个是「还没执行的查询计划」,一个是「已落地的内存对象」。

选型口诀:查库用 IQueryable<T>,算数用 IEnumerable<T>,干活用 IList<T>

这不是教条,而是对应三种真实动作:

最容易被忽略的一点:IQueryable<T> 的延迟执行是「表达式树级」的,一旦混入 IEnumerable<T> 操作(比如 .Select(x => new { x.Id, Name = x.Title.ToUpper() }) 中用了非 SQL 友好方法),EF Core 会自动截断翻译,提前把部分数据拉进内存再继续 —— 日志里会出现「Client evaluation」警告,性能拐点往往就在这里。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。