私は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")
);
はい、そこに第三の表は、あるデータ型が、それは、ルックアップテーブル&が重要ではないのです。
また、VersionsテーブルのFrom & Toカラムに格納されている値がバージョン番号を表していることが必要です。 To列がNULLでない場合、ObjectIdによって表される特定の項目がデータベースから削除されたことを意味します。
私のC#コードでは、クエリを作成する必要があります。データタイプID &バージョン番号の各組み合わせに対して1つのエントリを含むディクショナリがあります。 ORではなく一連のテストを構築する必要があります。
通常、た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で分離されています。 ORが必要です。
どうすればよいですか?
トニー
編集:
SELECT * を加入者を登録しよう バージョンから:
は、私が行ったときに、クエリは次のようになりする必要があることを言及するのを忘れてしまいました。 。 。 WHERE <一部の条件> AND(VersionCondition1 OR VersionCondition2 OR ...)
これは有望に見えます!私はこれを打ち、動作するかどうかを見てみましょう。 –
そのクエリです。元のクエリであると思われるforeachの最初の行を呼び出しました。どこですか? –
@TonyVitabileはい、それをキャッチするために感謝します。私は私の答えを更新しました。 – hvd