我有一个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