У меня есть модель Entity Framework 4.В этой модели есть 2 таблицы: подписчики и версии:
CREATE TABLE tracking."Subscribers"
(
"SubscriberId" UUID NOT NULL,
"RemoteAddress" VARCHAR(80) NOT NULL,
"Priority" INTEGER NOT NULL DEFAULT 100,
"DataTypeId" INTEGER NOT NULL REFERENCES tracking."DataTypes" ( "DataTypeId" ),
"Condition" VARCHAR(8000),
"Version" BIGINT NOT NULL DEFAULT 0,
"LastConnected" TIMESTAMPTZ NOT NULL,
CONSTRAINT "Subscribers_pkey" PRIMARY KEY ("SubscriberId", "DataTypeId")
);
CREATE TABLE tracking."Versions"
(
"ObjectId" UUID NOT NULL,
"Source" UUID NULL,
"From" BIGINT NOT NULL,
"To" BIGINT NULL,
"DataTypeId" INTEGER NOT NULL REFERENCES tracking."DataTypes" ( "DataTypeId" ),
CONSTRAINT "Versions_pkey" PRIMARY KEY ("ObjectId", "DataTypeId")
);
Да, есть третья таблица, DataTypes, но это таблица поиска и она не важна.
Кроме того, выНеобходимо знать, что значения, хранящиеся в столбцах «От» и «В» в таблице «Версии», представляют номера версий.Если столбец Кому не равен NULL, это означает, что конкретный элемент, представленный ObjectId, был удален из базы данных.
В моем коде C # мне нужно создать запрос.Существует словарь, который содержит одну запись для каждой комбинации идентификатора типа данных и номера версии.Мне нужно создать серию тестов, выполняемых OR, а не AND.
Обычно, чтобы построить условие в виде строки для использования в DbCommand, я бы использовал такой код:
bool isFirst = true;
string query = "...";
foreach ( KeyValuePair<int, long> version in versionsLastSent ) {
if ( ! isFirst ) {
query += " OR ";
}
query += "....";
isFirst = false;
}
Однако я не знаю, как включить это ИЛИ в запрос, используя структуру сущностей.Я знаю, что мой запрос будет общим объектом IQueryable, и я добавляю к нему условия, используя
query = query.Where( a => ... );
Но обычно они разделяются символом AND.Мне нужны операции.
Как мне это сделать?
Тони
Редактировать:
Я забыл упомянуть, что запрос должен выглядеть следующим образом, когдасделано:
SELECT * FROM Versions. Присоединяйтесь к подписчикам.,,ГДЕИ (VersionCondition1 ИЛИ VersionCondition2 ИЛИ...)