У меня есть класс, который обеспечивает общий доступ к LINQ к SQL сущностей, например:Как повысить эффективность запросов, выполняемых этим общим классом доступа к данным 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]
, а не выбирать все строки, а затем отфильтровывать все, кроме одного? Возможно ли в этом контексте?
Любая помощь приветствуется.
Отлично, просто испытал это, и он работает очарованием. Очень просто, и мне не нужно менять какой-либо код. Большое спасибо! –