2011-02-08 3 views
0

Я прототипирования какое-то хранилище, и я хочу знать, если это достаточно, чтобы иметь методы, которые работают на последовательностейтолько.C# IQueryable или AsQueryable

Например:

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

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

EDIT: что делать, если я хочу иметь только один метод группы:

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); 
+0

Список был разработан, прежде чем дженериков, так что если кто-то назвал '.Add()' с массивом, нет никакого способа для списка, чтобы знать, если вы хотите добавить все e элементов в массиве в список или добавить сам массив в список. В случае дженериков отдельные методы не нужны, потому что 'Add (T t)' и 'Add (IEnumerable t)' недвусмысленны. –

+1

+1 для вашего редактирования, однако (хотя я бы переключил вызовы вокруг, так что вам не нужно вызывать '.ToArray()') –

+0

на самом деле я говорю об общем списке, но html скрыть мой . , мои примеры не из списка, а то, что он мог реализовать в своем репо – Guillaume86

2

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

2

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

Смежные вопросы