我有一個Entity Framework 4模型。有2代表在該模型中,認購人及版本:不知道如何使用Entity Framework 4生成我需要的查詢
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")
);
是的,有一個第三個表,數據類型,但它是一個查找表&並不重要。
此外,您需要知道存儲在版本表中的列中的值代表版本號。如果To列不爲空,則表示由ObjectId表示的特定項目已從數據庫中刪除。
在我的C#代碼中,我需要構建一個查詢。有一個字典,其中包含每個數據類型ID &版本號的組合的一個條目。我需要建立一系列由ORs而不是ANDs進行測試的測試。
通常情況下,建立的條件爲在使用的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 => ...);
添加到它的條件,但這些通常由與運算分離。我需要ORs。
我該怎麼做?
託尼
編輯:
我忘了提,查詢需要像這樣做的時候:
SELECT * FROM JOIN 訂閱版本。 。 。 WHERE <部分條件> AND(VersionCondition1 OR VersionCondition2 OR ...)
這看起來很有希望!我會給這個鏡頭看看它是否有效。 – 2011-12-17 21:14:10
是那個query.Whwere在foreach中的第一行應該是originalQuery.Where? – 2011-12-17 23:51:59
@TonyVitabile是的,謝謝你的發現。我已經更新了我的答案。 – hvd 2011-12-17 23:53:49