Я работаю над проектом уровня доступа к базе данных и решил использовать Linq to SQL для него. Одна из вещей, которые я хотел сделать, - предоставить API, который может использовать выражения Linq в качестве аргументов для извлечения данных. Например, я написал этот API сейчас, который выглядит так:
public Result GetResults(System.Linq.Expressions.Expression<Func<Result, bool>> predicate)
{
Result result = db.Results.SingleOrDefault(predicate);
return result;
}
Затем вы можете использовать этот API для запроса к базе данных строки результатов, которая удовлетворяет определенным условиям, например:
Result result = Provider.GetResults(r => r.ID == 11);
Это работает очень хорошо. Я могу получить один ряд, который я хочу, исходя из моих условий.
Следующим шагом было получение нескольких объектов из базы данных.
То, как я заставил его работать, было так:
public List<Result> GetResults(System.Linq.Expressions.Expression<Func<Result, bool>> predicate)
{
List<Result> results = db.Results.Select(r => r).Where(r => r.ID == 11).ToList<Result>();
return results;
}
Как видите, я вызываю Select с r => r, это возвращает мне все, а затем я использую Where, чтобы отфильтровать то, что мне нужно.
Это работает ... но что-то говорит мне, что я делаю это действительно безобразно. Я могу ошибаться, но разве это не вытаскивает ВСЕ из таблицы результатов, а затем фильтрует? или он собирает правильный оператор SQL, который фильтрует на уровне базы данных?
В любом случае ... Я был бы очень признателен за некоторые рекомендации о том, как я могу выполнить эту задачу. Как мне написать API, который принимает выражение Linq в качестве аргумента и возвращает набор объектов из базы данных на основе этого выражения.
Спасибо!