В моем коде я хотел бы сделать свои репозитории IQueryable. Таким образом, критериями выбора будет дерево выражений linq.
Теперь, если я хочу смоделировать свой репозиторий в теории, это очень просто: просто реализуйте интерфейс моего репозитория (который также является объектом IQueryable).
Моя импровизированная реализация репозитория была бы только в коллекции памяти, но мой вопрос таков: знаете ли вы простой способ реализовать интерфейс IQueryable моего макета, чтобы передать запрос в мою коллекцию в памяти (IEnumerable)? 1005 *
Спасибо за ваш ответ,
Некоторая точность
Клиентский объект моего хранилища будет использовать мое хранилище следующим образом:
var result = из записи в MyRepository, где entry.Product == «SomeProduct» выбрать запись;
Что ToList или AsEnumerable заключается в том, чтобы выполнить запрос и вернуть результат в виде списка или в виде IEnumerable. Но я должен реализовать интерфейс IQueryable в своем хранилище с помощью IQueryProvider, который преобразует выражение в вызове объекта IEnumerable.
Решение
Реализация решения заключается в делегировании вызова IQueryable моей коллекции памяти с помощью AsQueryable.
public class MockRepository : IQueryable<DomainObject>
{
private List<DomainObject> inMemoryList = new List<DomainObject>();
#region IEnumerable<DomainObject> Members
public IEnumerator<DomainObject> GetEnumerator()
{
return inMemoryList.GetEnumerator();
}
#endregion
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
{
return inMemoryList.GetEnumerator();
}
#endregion
#region IQueryable Members
public Type ElementType
{
get
{
return inMemoryList.AsQueryable().ElementType;
}
}
public Expression Expression
{
get
{
return inMemoryList.AsQueryable().Expression;
}
}
public IQueryProvider Provider
{
get
{
return inMemoryList.AsQueryable().Provider;
}
}
#endregion
}