В Entity Framework, я должен использовать List <MyEntity>или IQueryable <MyEntity>в моей ViewModel и репозитории - PullRequest
3 голосов
/ 08 июня 2011

В ViewModel я должен создать список или IQueryable, а затем использовать его в моем представлении.

1 Вопрос EX:Во ViewModel у меня есть это свойство

public List<MyEntity> ListEntity {get;set;}
public IQueryable<MyEntity> ListIQEntity {get;set;}

Тогда В представлении я создаю такую ​​петлю.

<ul>
foreach(var e in Model.ListEntity)
{
   <li><%:e.MyInfo</li>
}
</ul>


<ul>
foreach(var e in Model.ListIQEntity )
{
   <li><%:e.MyInfo</li>
}
</ul>

2 Вопрос

В хранилище лучше вернуть IQueryable или Список сущностей.

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Если вы собираетесь просто зацикливаться на множестве, то, вероятно, лучше всего использовать IEnumerable<MyEntity>, что, по сути, то, что вы делаете, когда используете список, но не ограничивая себя использованием определенного типа.

На самом деле вам не нужно использовать IQueryable<MyEntity> на уровне представления, так как все дорогостоящие запросы должны были уже быть сделаны к тому времени, когда данные попадают в представление, и вы не должны выполнять никакой реальной обработки в этот уровень - делайте все это в модели или, если нужно, в контроллере, но не в представлении.

0 голосов
/ 13 апреля 2015

На этот вопрос уже отвечали, но я видел это, когда искал ответ на свой собственный похожий вопрос, и чувствую, что я узнал из этого, может помочь кому-то еще.

В моем коде мой Контроллер вызываетСлужба для получения данных из репозитория.

var employees = MyService.GetEmployees()

Затем она переходит в ViewModel в виде списка сотрудников.

Служба возвращает контроллеру, его клиенту, элемент типа IEnumerable.,Он НЕ возвращает IQueryable по двум причинам:

1) IQueryable использует System.Linq.Любой, кто использует мой сервис, должен будет импортировать это пространство имен, когда ему это не нужно *.

2) Если клиенту нужны отфильтрованные данные, ему необходимо сообщить об этом службе, например, var employee = MyService.GetCurrentEmployees ()/ GetEmployees (someFilter)

  • Если им необходимо выполнить дополнительную фильтрацию, они могут импортировать пространство имен и привести Список к IQueryable и использовать LINQ для этого.

служба не должна предполагать, что клиент может захотеть выполнить фильтрацию и будет возвращать IQueryable «на всякий случай».

В моем коде репозиторий вернет IQueryable для службы, потому что здесь происходит фильтрация, и я хочу использоватьLINQ.

Надеюсь, это кому-нибудь поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...