Я создаю приложение с сервисным уровнем (веб-сайт WCF) и клиентом Silverlight 4. Услуги RIA не являются опцией, поэтому мы создаем промежуточные классы для передачи туда и обратно. Для целей этого вопроса давайте предположим, что я передаю туда и обратно Вкусные Food
Объекты.
public class FoodData
{
public int Id { get; set; }
public string Name { get; set; }
public Tastyness TastyLevel { get; set; }
}
Модель EF - это, по сути, один и тот же класс, таблица с тремя основными полями (Tastyness - это int, соответствующий нашему enum Tastyness).
Я часто использую подобные заявления при выполнении запросов 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;
}
Без вызова .ToList () я получаю исключение из-за того, что LINQ не может преобразовать пользовательский метод в эквивалент запроса, что, как я понимаю.
Мой вопрос касается вызова .ToList () перед .Select (...) с пользовательским расширением для преобразования нашего объекта в POCO-версию Food объект.
Есть ли лучший шаблон для выполнения здесь или, может быть, даже лучшая альтернатива .ToList (), которая может быть более производительной, поскольку мне не требуется функциональность результата List <..>.