IEnumerable VS IList VS IQueryable

Nuevo en la escena de MVC.net (y .net para esa materia), pero parece que encuentro una amplia gama de opciones cuando quiero llenar una “lista” con datos. En mi caso en este momento, me gustaría rellenar una lista de una consulta de selección de elementos y mostrar los resultados en JSON para su salida, así que tengan paciencia conmigo …

Por lo tanto, mi clase de viewmodel es algo como:

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

Y luego me gustaría rellenarlo con el resultado de mi consulta:

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

Entonces, ¿haría un bucle de la salida en mi Lista para que luego pueda emitir en mi cadena de retorno de Json? ¿Y cuando uso una LISTA VS IENUMERABLE VS IQUERYABLE ?

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

Mis reglas de oro:

  • Use una Lista cuando tenga que agregar, eliminar o referirse a un elemento por índice.

  • Use un IQueryable cuando tenga que ejecutar consultas ad-hoc contra él.

  • Utilice IEnumerable por defecto.

Parece que ya está haciendo la consulta “en” su base de datos, por lo que sugeriría usar la versión más sencilla: IEnumerable para simplemente poder recorrer los resultados.

Si fuera nuevo en .NET y C #, pasaría un tiempo investigando y conociendo cuáles son los diferentes tipos de colecciones, en qué se diferencian y cuándo usarlos. Usará colecciones tan a menudo que no puede darse el lujo de tener un resumen “simple de una línea” como los demás encuestados.

Aquí hay una buena guía sobre los tipos de colección .NET: http://msdn.microsoft.com/en-us/library/0ytkdh4s.aspx

IQueryable es su propia bestia especial y merece su propia guía: http://msdn.microsoft.com/en-us/library/system.linq.iqueryable.aspx

Cada interfaz tiene su propio conjunto de usos.

IQueryable es para consultas diferidas (es decir, guarda la consulta pero solo la ejecuta cuando se enumera)

IEnumerable puede ser enumerado y eso es todo.

IList puede tener artículos añadidos y eliminados.