Проблема 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-й, потому что я могу шлепнуть интерфейс для разных классов, и этоБолее общий способ, но, похоже, не работает. Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос