【问题标题】:IEnumerable<T> VS IList<T> VS IQueryable<T>IEnumerable<T> VS IList<T> VS IQueryable<T>
【发布时间】:2011-04-05 22:28:07
【问题描述】:

对于 MVC.net 场景(以及 .net)来说是新手,但是当我想用数据填充“列表”时,我似乎找到了很多选择。就我目前而言,我想从项目的选择查询中填充一个列表,并以 JSON 格式呈现结果以供输出,所以请耐心等待......

所以,我的视图模型类是这样的:

[Serializable()]
public class TFSquery 
{
    public int MsgUid { get; set; }
    public DateTime CreateStamp { get; set; }    
}

然后我想用我的查询输出填充它:

List<TFSquery> z = (from msg in _DB.Msg 
                    select new { msg.MsgUID, msg.CreateStamp }).ToList();

然后我会将输出循环到我的列表中,以便我可以在我的 Json 返回字符串中输出?当我使用 LIST VS IENUMERABLE VS IQUERYABLE??

return Json(new { Result = z }, JsonRequestBehavior.AllowGet);     

【问题讨论】:

    标签: c# .net asp.net-mvc json


    【解决方案1】:

    我的经验法则:

    • 当您必须按索引添加、删除或引用项目时,请使用列表。

    • 当您必须针对它运行临时查询时,请使用 IQueryable

    • 默认使用IEnumerable

    看起来您已经在“在”您的数据库中进行查询,所以我建议使用最简单的版本:IEnumerable 以便能够简单地遍历结果。

    【讨论】:

    • 实际上如果可能的话,var 关键字应该在这种情况下使用,那么您不必担心将类型转换到任何地方。只需将其更改为var z = ...,最后不添加ToList()。这可能会保留它IQueryable,但无论如何它都继承自IEnumerable
    • 添加/删除时 T 的 ICollection,还需要索引时 T 的 IList(或 T[])。大多数事情只需要 T 的 IEnumerable 就可以解决,这对于在公共接口中公开非常有用。我很少再使用 List 了。
    【解决方案2】:

    如果您是 .NET 和 C# 的新手,我会花一些时间研究并了解不同的集合类型是什么、它们有何不同以及何时使用它们。您会经常使用集合,以至于您无法像其他回答者发布的那样拥有“简单的单行”摘要理解。

    这里有一个很好的 .NET 集合类型指南: http://msdn.microsoft.com/en-us/library/0ytkdh4s.aspx

    IQueryable 是它自己的特殊野兽,值得拥有自己的指南: http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx

    【讨论】:

    • +1 最佳答案通常是指向适当来源的答案。感谢您发布 MSDN 链接!
    【解决方案3】:

    每个接口都有自己的一组用途。

    IQueryable 用于延迟查询(即保存查询但仅在枚举时执行)

    IEnumerable 可以枚举,仅此而已。

    IList 可以添加和删除项目。

    【讨论】:

    • IEnumerable 也是延迟执行。
    • IEnumerable 也可用于延迟执行。例如,请参阅Enumerable.Reverse。它返回一个IEnumerable&lt;TSource&gt;,但在枚举第一个元素之前不会开始实际的反转。
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    相关资源
    最近更新 更多