Использование LINQ to SQL с динамическими таблицами - PullRequest
4 голосов
/ 03 апреля 2009

Я пытаюсь перевести старый проект на использование LINQ, но столкнулся с довольно серьезной проблемой. Проблема в том, что у нас есть динамические таблицы для поисковой индексации (CM-система с динамическими атрибутами). В поисковом индексе есть столбцы для каждого атрибута поиска {attribute_x, attribute_y, ...}. Теперь проблема в том, что я не могу статически определить, какие столбцы доступны (или даже какую таблицу использовать при разделении поисковых индексов), поэтому мне нужен способ сделать это на лету.

Я пытался использовать динамические выражения, но им все еще требуется тип для построения выражения, и я не смог сгенерировать действительный тип по отражению. (Кажется, никакой MemberInfo не генерируется).

Я мог бы также удовлетворить просто возможность генерировать выражение для поиска (но я думаю, что это не простая задача). Что-то вроде

var mySearchIndex= db.GetTable(myTableType);
var query = from p in db.Products from idx in mySearchIndex;
query = query.Where(
 "idx." + attributeName + " > 50.0 &&
 idx." + attributeName + " 

было бы желательно.

Кто-нибудь сталкивался с решением этой проблемы? Последние два дня я просматривал посты в блогах и форумы.

Ответы [ 3 ]

1 голос
/ 03 апреля 2009

Я не верю, что есть решение этой проблемы с использованием LINQ. По крайней мере, не то, что я когда-либо слышал или нашел. LINQ разрывается, если изменяется структура таблицы, и вам приходится каждый раз воссоздавать DataModel.

Если я ошибаюсь, мне не терпится услышать об этом. :)

1 голос
/ 03 апреля 2009

Вы работаете вне дизайна Linq to SQL, но я думаю, что это может быть сделано, если вам действительно нужно. Лучше всего исследовать это, вероятно, XmlMappingSource, который вы можете использовать в конструкторе своего контекста. Я имел некоторый успех с этим, когда дело дошло до обработки переименования таблицы на лету.

При отображении XML фактическое имя столбца в базе данных является атрибутом «Имя» элемента столбца, а свойство класса - «Член». Если вы измените это в XML, он должен соответствующим образом отобразить возможный запрос.

1 голос
/ 03 апреля 2009

Возможно, вы захотите попробовать Linq to Dataset :

LINQ to DataSet облегчает и быстрее запрашивать данные, кэшированные в Объект DataSet. В частности, LINQ to DataSet упрощает запросы путем позволяя разработчикам писать запросы от самого языка программирования, вместо использования отдельного запроса язык.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...