gpt4 book ai didi

c# - 不知道如何使用 Entity Framework 4 生成我需要的查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:28:41 25 4
gpt4 key购买 nike

我有一个 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,但它是一个查找表,并不重要。

此外,您还需要知道存储在版本表中的“从”和“到”列中的值代表版本号。如果 To 列不为空,则表示 ObjectId 表示的特定项目已从数据库中删除。

在我的 C# 代码中,我需要构建一个查询。有一个字典,其中包含每个数据类型 ID 和版本号组合的条目。我需要构建一系列由 OR 而不是 AND 分开的测试。

通常,要将条件构建为在 DbCommand 中使用的字符串,我会使用如下代码:

bool isFirst = true;
string query = "...";

foreach ( KeyValuePair<int, long> version in versionsLastSent ) {
if ( ! isFirst ) {
query += " OR ";
}

query += "....";
isFirst = false;
}

但是,我不知道如何使用 Entity Framework 将 OR 放入查询中。我知道我的查询将是一个通用的 IQueryable 对象,并且我使用

向它添加条件
query = query.Where( a => ... );

但这些通常由 AND 分隔。我需要 OR。

我该怎么做?

托尼

编辑:

我忘了提到查询完成后需要如下所示:

选择 *来自版本加入订阅者。 . .WHERE AND (VersionCondition1 OR VersionCondition2 OR . . .)

最佳答案

最简单的方法是不使用 OR,因为使用 Union 可以获得完全相同的结果:

IQueryable originalQuery = ...;
IQueryable query = null;

foreach ( KeyValuePair<int, long> version in versionsLastSent ) {
IQueryable queryPart = originalQuery.Where(...);
if (query == null)
query = queryPart;
else
query = query.Union(queryPart);
}

关于c# - 不知道如何使用 Entity Framework 4 生成我需要的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8546481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com