Есть здесь кто-нибудь с опытом написания пользовательских провайдеров Linq?
То, что я пытаюсь сделать, это сказать, должно ли MemberExpression, являющееся свойством бизнес-объекта, быть включено в SQL или рассматриваться как константа, потому что это из локальной переменной, которая, как оказалось, является бизнес-объектом .
Так, например, если у вас есть это:
Customer c = LoadCustomerFromDatabase();
var orders = from o in db.Orders() where o.CustomerID == c.CustomerID select o;
В данный момент мой переводчик запросов попытается выполнить SELECT * FROM orders o where o.CustomerID = c.CustomerID
, что, конечно, не работает.
То, что я хотел бы сделать, это изучить выражение MemberExpression на c.CustomerID
и попытаться выяснить, является ли оно локальной переменной или просто тем, что используется как часть выражения Linq.
Мне удалось сделать это как второй проход по запросу, отыскивая поля, которые SQL Server не сможет связать, и вводя вместо них их значения, но, если возможно, я бы хотел, чтобы все это происходило при в то же время. Я попытался посмотреть на выражения Type
property и IsAutoClass
, но это было только предположение, потому что оно содержало слово Auto. И это не сработало:)