Linq репозиторий и GetTable <T>() - PullRequest
1 голос
/ 06 октября 2010

Я придерживаюсь довольно стандартного шаблона репозитория L2S, используя следующий в качестве одного из методов

public IEnumerable<T> GetAllByFilter(Func<T, bool> expression)
 {
     return _dataContext.GetTable<T>().Where(expression);
 }

Я немного расстроен, когда вижу, что вызов GetTable буквально получает таблицу, а выражение Where предположительно оценивается в памяти впоследствии.

Так просто позвонить, как

var order = GetAllByFilter(o => o.OrderNumber == 1);

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

Линк обычно так плох? Или я что-то упустил?

1 Ответ

4 голосов
/ 06 октября 2010

Изменение:

public IEnumerable<T> GetAllByFilter(Func<T, bool> expression)
{
    return _dataContext.GetTable<T>().Where(expression);
}

Кому:

public IQueryable<T> GetAllByFilter(Expression<Func<T, bool>> expression)
{
    return _dataContext.GetTable<T>().Where(expression);
}

Это будет использовать Queryable (то есть SQL) вместо Enumerable (то есть локально) и, следовательно, будет работать намного лучше.

...