Скажем, я создаю результат запроса
var query = from a in tblXYZ join c in tblABC on a.id = b.id select new {a.x, b.x};
Какой лучший способ передать это в виде? Должен ли я создать новый объект и скопировать результат запроса в него?
Я думаю, что это почти всегда предпочтительный механизм для создания конкретной модели. Я бы также второй рекомендации @Marc материализовать запрос в контроллере и передать представление в список. Если у вас есть проблема с запросом, гораздо проще диагностировать, выполняется ли запрос в контроллере, а не в представлении. Трассировка стека на самом деле полезна в этот момент.
Как показано, это будет анонимный тип, к которому можно получить доступ (еще проще в 4.0 через dynamic
), но это не уродливо. В настоящее время он также страдает от двусмысленности, когда происходит доступ к данным, поскольку LINQ отложен, что означает, что если вы передадите этот запрос в представление, вы действительно делаете доступ к данным во время просмотра (а не внутри контроллера).
У меня возникло бы желание создать класс для представления данных (по существу, в виде модели) и вернуть список сущностей (не отложенный запрос).
Поместите запрос в репозиторий. В контроллере передайте результат запроса в указанный вид модели для этого представления.
Model-View - заданный класс для передачи данных с контроллера на представление.