Я видел статью DamienG (http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider) о том, как сопоставить свойства клиента с sql.
Я прочитал эту статью и увидел в ней большой потенциал. Определенно сопоставление клиентских свойств с SQL - отличная идея.
Но я хотел использовать это для чего-то более сложного, чем просто конкатенация строк. В настоящее время мы пытаемся внедрить многоязычие в наши бизнес-объекты, и я надеялся, что мы можем оставить все существующие запросы linq2sql без изменений и просто изменить код многоязычных свойств, чтобы они фактически возвращали данное свойство в CurrentUICulture.
Первой идеей было изменить эти поля на XML, а затем попробовать Object.Property.Elements (). Where (...), но он застрял в Elements (), так как не смог перевести его в sql , Я где-то читал, что поля XML на самом деле рассматриваются как строки, и только на сервере приложений они становятся XElements, так что фильтрация в любом случае будет выполняться на сервере приложений, а не в БД. Справедливо, это не сработает. Давайте попробуем что-нибудь еще ...
Итак, вторая идея состояла в том, чтобы создать таблицу PolyGlots (имя взято из http://weblogic.sys -con.com / node / 102698? Page = 0,1 ), таблицу PolyGlotTranslations и таблицу культуры, где PolyGlots будет ссылаться от каждого интернационализированного свойства. Вот как я хотел сказать, например:
private static readonly CompiledExpression<Announcement, string> nameExpression
= DefaultTranslationOf<Announcement>
.Property(e => e.Name)
.Is(e=> e.NamePolyGlot.PolyGlotTranslations
.Where(t=> t.Culture.Code == Thread.CurrentThread.CurrentUICulture.Name)
.Single().Value
);
теперь, к сожалению, здесь я получаю ошибку, что функцию Where () нельзя преобразовать в sql, что немного разочаровывает, так как я был уверен, что это пройдет.
Я предполагаю, что это терпит неудачу, потому что IEntitySet в основном IEnumerable, а не IQueryable, я прав?
Есть ли другой способ использовать класс compiledExpressions для достижения этой цели?
Любая помощь приветствуется.