IEnumerable <T> VS IList <T> VS IQueryable <T>

den*_*isb 19 .net c# asp.net-mvc json

MVC.net场景的新手(以及.net),但是当我想要用数据填充"列表"时,我似乎找到了各种各样的选项.在我的情况下,我想从一个选择的项目查询填充一个列表,并用JSON渲染结果输出,所以请耐心等待....

所以,我的viewmodel类是这样的:

[Serializable()]
public class TFSquery 
{
    public int MsgUid { get; set; }
    public DateTime CreateStamp { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

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

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

那么我会将输出循环到我的List中,以便我可以在我的Json返回字符串中输出吗?当我使用LIST VS IENUMERABLE VS IQUERYABLE

return Json(new { Result = z }, JsonRequestBehavior.AllowGet);     
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 33

我的经验法则:

  • 必须按索引添加,删除或引用项目时使用列表.

  • 使用IQueryable时,你必须对它运行即席查询.

  • IEnumerable默认使用.

看起来你已经在"数据库"中进行了查询,因此我建议使用最简单的版本:IEnumerable只需循环查看结果即可.

  • 实际上如果可能的话,在这种情况下应该使用`var`关键字,那么你不必担心在任何地方转换类型.只需将其更改为`var z = ...`而不使用末尾的`ToList()`.这可能会保持"IQueryable",但无论如何都继承自"IEnumerable". (8认同)
  • 当需要索引时,添加/删除时的T的ICollection,T(或T [])的IList.大多数事情都只是通过IE的数量来逃避,这在公共接口中暴露是很好的.我很少再使用List了. (8认同)

Joh*_*ell 10

如果您是.NET和C#的新手,我会花一些时间研究并了解不同的集合类型是什么,它们有何不同,以及何时使用它们.你会经常使用收藏品,你不能像其他回答者那样有一个"简单的单行"概要理解.

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

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