【发布时间】:2020-09-23 06:51:09
【问题描述】:
问题
是否可以在 C# 中使用带有 EF Core 的 LINQ 执行 SQL Tuple Comparison?
更多信息
预期的 SQL 结果
SELECT * FROM Locations
WHERE (Locations.Id,Locations.Created) >= ("08d85dba-eb22-4fb4-8868-f833a1403bec","2020-09-20 23:09:55.885263")
ORDER BY Locations.Created
LIMIT 10;
我特别关心的是WHERE 子句表达式,我将其称为Tuple Comparison
WHERE (Locations.Id,Locations.Created) >= ("08d85dba-eb22-4fb4-8868-f833a1403bec","2020-09-20 23:09:55.885263")
我使用 LINQ 尝试了多种方法,但 C# 编译器总是以失败告终,因为 >= 运算符和 C# 不知道如何比较它。
原因
我正在尝试做一个Tuple Comparison 来从这个post 实现基于光标的分页。
现在我将使用存储过程,我只是想知道它是否可能
【问题讨论】:
-
总是以失败告终。这不是答案吗?我不认为 EF 会投资 SQL Server 不支持的功能(都来自微软,太尴尬了)。此外,我认为 C# 和 SQL 之间支持的运算符不匹配是一个主要障碍。
-
这对你的情况不起作用
Locations.Id == "08d85dba-eb22-4fb4-8868-f833a1403bec" && Locations.Created >= "2020-09-20 23:09:55.885263" -
附注。为什么要比较一个 guid 是否等于或大于另一个 guid?我想如果它们是连续的是有道理的,但是创建日期本身就足够了。
-
@GertArnold 那是基于我对 LINQ、C# 和 SQL 的了解,只是想看看是否有人有我不知道的方法。不过你说的有道理。我也不是 SQL 专家,不确定元组比较在 SQL 中的含义。它是独一无二的还是某种东西的简写?
-
@NicholasMata 这是简写。
(a, b) >= (1, 2)与a > 1 OR (a == 1 AND b >= 2)基本相同。虽然我不确定元组在索引策略中的表现如何。
标签: c# mysql entity-framework linq asp.net-core