LINQ to SQL中的Guid类型和('>'大于比较)

时间:2013-01-13 16:09:24

标签: c# asp.net .net linq-to-sql

请帮帮我。 我尝试在.Where()查询方法中比较两个guid。但我得到编译错误。 错误1运算符'>'不能应用于“System.Guid”和“System.Guid

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

3 个答案:

答案 0 :(得分:1)

并且:

u.FriendID.CompareTo(startUser) > 0

答案 1 :(得分:0)

我知道这是一个老问题,但我之前已经看过这个数据案例,它可能与将来的某个人有关。 这可能与您出于某种原因将您的表(物理组织,默认为主键)聚集在uniqueidentifier上的情况相关。如果需要批量读取或分页表,最终可能会出现以下读取的SQL查询:

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

这通常不是一个非常优化的设计,正如您所观察到的那样,不能使用LINQ-to-SQL。此外,如果在添加更多行后稍后执行相同的查询,批处理中的内容将会更改。如果你有一个CreatedDate(时间)列排序,那就更好了。或者使用创建的日期列作为第一个条件,然后使用!=检查GUID(如果可以使用相同的标记创建多个)。 理想情况下,您可以添加代理标识列(以及其上的集群),然后您可以过滤该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);

答案 2 :(得分:-2)

申请大于或小于Guid是没有意义的。

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

两个Guids但哪个更大?你放弃 - 并计算十六进制的总数?或者如何在-?

之间添加HEX的总和

它只是没有完成(虽然它可能是)

应用逻辑==和!=确实有意义。 Guid结构会使==和!=运算符重载,因此使用它们也可以轻松比较字符串值,即

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