Это все еще кажется проблемой; а именно в простых случаях, таких как:
var list = from lang in db.Languages
join site in db.SiteConfigLanguages on
lang.Code equals site.LanguageCode
select lang;
Это должно привести к простому SQL (хотя в данном примере это бессмысленно):
SELECT Language.* FROM Language LEFT JOIN SiteConfigLanguage ON Language.Code = SiteConfigLanguage.LanguageCode;
Сбой внутри той же функции VisitMemberAccess, что и (в данном случае) язык не распознаваемого типа объявления (т. Е. String или DateTime). Это очень похоже на описание @matware, приведенное выше, однако звучит так, как будто член «IsValid» является чистым кодом C #, тогда как в этом случае lang.Code - это просто ссылка на столбец в базе данных.
В настоящее время я изучаю обходные пути, поскольку это только часть более крупного запроса LINQ, который мне не удался; если я найду что-нибудь, я опубликую это здесь. В противном случае, известны ли другие решения / обходные пути для этой проблемы?
ОБНОВЛЕНИЕ: игнорировать меня здесь; это просто из-за того, что я пропустил простую строку в операторе LINQ; вам необходимо убедиться, что вы используете ключевое слово "into" для завершения!
т.е.
var list = from lang in db.Languages
join site in db.SiteConfigLanguages on
lang.Code equals site.LanguageCode into sl
from siteLang in sl.DefaultIfEmpty()
select lang;
У меня есть еще одна ошибка, но, по крайней мере, это исключение разрешено. Следующий, к сожалению, выглядит немного неприятнее (внутри библиотеки System.Linq).