У меня есть несколько различных источников данных, к которым мне нужно обращаться, и я смог ограничить все свои запросы очень простыми выражениями, состоящими не более чем из двух условий. Пример типичной сложности моих выражений lamba:
b => b.user == "joe" && b.domain == "bloggs.com"
На моих источниках данных, отличных от SQL, я в порядке, поскольку могу преобразовать их в списки объектов и использовать запрос LINQ, например:
public override T Get(List<T> assets, Expression<Func<T, bool>> whereClause)
{
return assets.Where(a => whereClause.Compile()(a)).FirstOrDefault();
}
Моя проблема в том, что когда мне нужно запросить реляционную базу данных - меня действительно интересуют только Postgresql и MySQL - я немного боролся. У меня есть nHibernate, чтобы Linq «работал», но были некоторые проблемы, из-за которых он зависает и прекращает доступ к базе данных или не может закрывать соединения, типичные вещи, которые можно ожидать от чего-то в бета-версии, поэтому я не жалуюсь.
Поскольку мои запросы настолько просты, и я рад сам создавать SQL, я хотел бы знать, есть ли относительно безболезненный способ превращения моих выражений в предложения SQL где?
Я быстро обыскал и нашел несколько примеров, и, конечно, уже есть некоторые механизмы Linq-to-SQL, так что я знаю, что это можно сделать. Вопрос в том, могу ли я что-то сделать за день или меньше усилий? Это то, что, по моим оценкам, потребуется, чтобы найти совместимую библиотеку Linq-to-SQL и загрузить ее, если все будет хорошо. У меня есть серьезные соображения по поводу производительности, поэтому для меня предпочтительнее использовать сырой SQL, а не работать через ORM.