Guid类型和('>'大于比较)在LINQ到SQL

本文关键字:SQL 比较 LINQ 类型 Guid 大于 | 更新日期: 2023-09-27 17:52:55

请帮帮我。我尝试在. where()查询方法中比较两个guid。但我得到编译错误。错误1:操作符">"不能应用于"系统"类型的操作数。"向导"answers"系统"。Guid

Guid startUser = ////Here I get user by url id param
List<Friends> friends = Common.DataContext.Friends.Where(u => u.FriendID > startUser).Take(5);

Guid类型和('>'大于比较)在LINQ到SQL

And:

u.FriendID.CompareTo(startUser) > 0

?

我知道这是一个老问题,但我以前见过这个数据案例,它可能与未来的人有关。当您出于某种原因将表(物理组织,默认使用Primary键)聚集在一个惟一标识符上时,这可能是相关的。如果需要批量读取表或对表进行分页,则可以使用如下SQL查询:

SELECT TOP (@batchsize)
    *
FROM myTable
WHERE UserId > @previousBatchUserId

这通常不是一个非常优化的设计,并且正如您所观察到的,它不适用于LINQ-to-SQL。此外,如果在添加更多行之后执行相同的查询,批处理中的内容将发生变化。如果您有一个CreatedDate(time)列,那么按此排序会好得多。或者使用创建的日期列作为第一个条件,然后对GUID进行!=检查(如果可以创建多个具有相同戳记的列)。理想情况下,您将添加一个代理标识列(以及在其上的集群),然后您可以对该ID进行过滤,该ID大于与所需GUID对应的ID。

它可能看起来像:

Guid startUser = //some guid
int startUserId = Common.DataContext.Friends.Single(u => u.FriendID == startUser).Id;
List<Friends> friends = Common.DataContext.Friends.Where(u => u.Id > startUserId);

对Guid应用大于或小于是没有意义的。

0f8fad5b-d9cb-469f-a165-70867728950e7c9e6679-7425-40de-944b-e07fc1f90ae7

两个Guids,但哪个更大?你是否删除-并计算十六进制的总数?或者把HEX的和加起来怎么样?

这只是简单地没有做(虽然它可以)

然而,

Apply logical == and !=是有意义的。Guid结构体确实重载了==和!=操作符,所以使用它们,你也可以很容易地比较字符串值,例如

var isEqual = guid.ToString().Equals(otherGuid.ToString());