Estoy creando una aplicación con una capa de servicio (sitio web WCF) y un cliente de Silverlight 4. Los servicios de RIA no son una opción, por lo que creamos clases intermedias para pasar de ida y vuelta. A los efectos de esta pregunta, supongamos que estoy pasando adelante y atrás Tasty Food
Objetos.Entity Framework Seleccione un POCO nuevo sin .ToList() primero
public class FoodData
{
public int Id { get; set; }
public string Name { get; set; }
public Tastyness TastyLevel { get; set; }
}
El modelo EF es esencialmente la misma clase, una tabla con tres campos básicos (el tastyness es un entero que corresponde a nuestra enumeración tastyness).
me encuentro con este tipo de declaraciones mucho al hacer consultas de Entity Framework:
public List<FoodData> GetDeliciousFoods()
{
var deliciousFoods = entities.Foods
.Where(f => f.Tastyness == (int)Tastyness.Delicious)
.ToList() // Necessary? And if so, best performance with List, Array, other?
.Select(dFood => dFood.ToFoodData())
.ToList();
return deliciousFoods;
}
Sin la .ToList() llamo consigo una excepción sobre LINQ no ser capaz de traducir el método personalizado a una consulta equivalente, lo cual entiendo.
Mi pregunta es acerca de la llamada a .ToList() antes de la.Elija (...) con la extensión personalizada para convertir nuestro objeto a la versión POCO del objeto de Alimentos.
¿Hay un mejor patrón para hacer aquí, o tal vez incluso una mejor alternativa a .ToList() que puede ser más eficaz ya que realmente no requieren la funcionalidad del resultado List < ..>.
Sí. Tu primer ejemplo, con la proyección directa, es muy sabroso. –
Muy bien, eso es exactamente de lo que estaba tratando de obtener una mejor explicación. En mi caso, utilizo todos los campos para el objeto en el Objeto de transferencia de datos (FoodData), por lo que el SQL probablemente no mejore demasiado. Esta información dará forma a la forma en que consulto las colecciones de entidades a partir de ahora. – Jacob
más 1 para usar AsEnumerable() – mhand