Проблема Linq To SQL - не поддерживается перевод в SQL (проблема со свойством C #)
расширение некоторых классов Linq до SQL. Я'у нас есть 2 аналогичных утверждения, первое работает, второене ("не поддерживает перевод на SQL " ошибка).
var reg2 = rs.ProductRegistrations().SingleOrDefault(p => p.Product.product_name == "ACE")
var reg5 = rs.ProductRegistrations().SingleOrDefault(p => p.product_name == "ACE");
Прочитав эту ссылкуLINQ: нет перевода на SQL
Я понимаю (думаю), что в принципе все должно бытьв соответствии"в противном случае дерево выражений не может быть правильно рассчитано. Первый пример напрямую обращается к LinqToSql EntitySet "Товар" (сохраняя все в строке), тогда как во втором примере используется свойство, которое определяется следующим образом: I '
public partial class ProductRegistration :IProduct
{
public string product_name
{
get { return this.Product.product_name; }
}
}
Я предполагаю, что моя проблема в том, что LinqToSql не может это перевести.
Как бы я включил "имущество" в эквивалентное утверждение? Я знаю, что мне нужно использовать System.Linq.Expressions.Expression, но все, что ямы пытались нене работает (некоторые нет даже скомпилировать). Может быть, мне следует создать метод Extension (используя Expression), а затем вызвать его из свойства? Может ли свойство вызвать метод расширения ??
Вещи, как показано ниже, нет работа:
public static System.Linq.Expressions.Expression ProductName2 (string pname)
{
return (p => p.product_name == pname);
}
Итог, я знаю, что мне нужно обернуть мой метод доступа в "Выражение <....>» но я нене знаю, как получить доступ к этому от собственности, так что "reg5" Переменная выше будет работать правильно.
Было бы здорово, если бы был какой-то магический атрибут, который я мог бы просто добавить к свойству "автоматическое выражение» свойство и сделать LinqToSql счастливым, вместо того, чтобы обернуть его в выражение <...>
Хотел бы быть в состоянии сделать это ...
public partial class ProductRegistration :IProduct
{
[Auto-Expression]
public string product_name
{
get { return this.Product.product_name; }
}
}
РЕДАКТИРОВАТЬ Ссылка и ответ ниже работает. Здорово, спасибо. 2-я часть моего вопроса, снова яу нас есть 2 аналогичных утверждения, первое работает, второене ("не поддерживает перевод на SQL " ошибка).
var reg = rs.ProductRegistrations().ProductName("ACE").WithTranslations().SingleOrDefault();
var reg2 = rs.ProductRegistrations2().ProductName("ACE").WithTranslations().SingleOrDefault();
Разница в них заключается в том, что 1-й возвращает IQueryableконкретный класс "IQueryable [ProductRegistration]»тогда как 2-й возвращает IQueryable изинтерфейс "IQueryable [IProduct]», Я хотел бы использовать 2-й, потому что я могу шлепнуть интерфейс для разных классов, и этоБолее общий способ, но, похоже, не работает. Есть идеи?