У меня есть класс, который обеспечивает общий доступ к сущностям LINQ to SQL, например:
class LinqProvider<T> //where T is a L2S entity class
{
DataContext context;
public virtual IEnumerable<T> GetAll()
{
return context.GetTable<T>();
}
public virtual T Single(Func<T, bool> condition)
{
return context.GetTable<T>().SingleOrDefault(condition);
}
}
На внешнем интерфейсе оба этих метода работают, как и следовало ожидать.Однако когда я запускаю трассировку в профилировщике SQL, метод Single выполняет то, что составляет SELECT * FROM [Table]
, а затем возвращает единственную сущность, которая удовлетворяет данному условию.Очевидно, что это неэффективно, и это вызвано тем, что GetTable()
возвращает все строки.
Мой вопрос заключается в том, как получить запрос, выполняемый методом Single()
, в форме SELECT * FROM [Table] WHERE [condition]
, а невыбрать все строки, а затем отфильтровать все, кроме одного?Возможно ли в этом контексте?
Любая помощь приветствуется.