C # IQueryable или AsQueryable - PullRequest
       44

C # IQueryable или AsQueryable

0 голосов
/ 09 февраля 2011

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

Например:

public void AddEntities<T>(IQueryable<T> sequence);

Теперь, этот прототип метода выглядит нормально и действительно универсальным , но это отстой, когда кто-то хочет сделать что-то вроде:

var t = new T();
// Add just a single entity.
repository.AddEntities(???);

ЧтоКаковы решения для этого случая?

Должен ли я увеличить свой интерфейс и добавить методы, такие как AddSingleEntity<T>(T t) и RemoveSingleEntity<T>(T t), или я должен оставить его как есть и использовать что-то вроде:

repository.AddEntities(new List { new T() }.AsQueryable());

Очевидно, что оба варианта имеют недостатки: первый делает интерфейс более уродливым и менее компактным, второй просто выглядит немного странно.

Что бы вы сделали ипочему?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2011

Я бы создал дополнительные методы для обработки операций с отдельными объектами, потому что это будет выглядеть чище, и многие обычные интерфейсы делают это (Список):

public void Add<T>(IEnumerable<T> entities) { ... }

public void Add<T>(params T[] entities) { this.Add(entities.AsEnumerable()); }

теперь можно звонить:

repo.Add(entity);
repo.Add(entity1, entity2);
repo.Add(entityList);
2 голосов
/ 09 февраля 2011

Я бы не работал с IQueryable в данном конкретном случае.Это запрос.Прочитайте эту полезную статью.Используйте IEnumerable при отправке данных.

2 голосов
/ 09 февраля 2011

почему бы не добавить repository.AddEntity(T t)?Просто и приятно.Похоже, что немного перепроектировал.

...