gpt4 book ai didi

c# - EF ICollection 与 List 与 IEnumerable 与 IQueryable

转载 作者:IT王子 更新时间:2023-10-29 03:53:18 27 4
gpt4 key购买 nike

因此,我的 EF 模型具有关系,根据我在示例中看到的内容,这些关系应该使用 ICollection 的虚拟属性来完成。

例子:

 public class Task
{
public int Id { get; set; }
public string Description { get; set; }
public virtual ICollection<SubTask> { get; set; }
}

我在某处读到我应该使用 IEnumerable 来防止延迟执行,对吗?这意味着如果我的 DAL 方法返回 IEnumerable,仍然是 IQueryable,SQL 将在那个时刻执行,而不是在我在网页中调用 .TOList 的那一刻。

那么,最佳做法是什么?我应该返回什么? IEnumerable、列表?、IList、ICollection?

谢谢

最佳答案

IQueryable :

  • 在您真正遍历项目之前不会执行查询,可能是通过执行 .ToList()foreach。这意味着您仍然可以添加过滤器,例如 Where()
  • 扩展 IEnumerable

IEnumerable :

  • 仅转发的项目列表。如果不通过第 0-3 项,您就无法到达“第 4 项”。
  • 只读列表,不能添加或删除。
  • 仍然可以使用延迟执行(IQueryable 仍然是一个 IEnumerable)。

IList :

  • 随机访问完整列表
  • 可能完全在内存中(没有延迟执行,但谁知道实现它的确切类是什么?)
  • 支持添加和删除
  • 扩展 IEnumerable 和 ICollection

ICollection :

  • 介于 IEnumerable 和 IList 之间。
  • 扩展 IEnumerable

什么是“最佳”取决于您的要求。通常,如果您只想显示项目,IEnumerable 就“足够好”了。至少始终使用通用变体。

关于c# - EF ICollection 与 List 与 IEnumerable 与 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11307171/

27 4 0