5

请帮我。我尝试在 .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);
4

3 回答 3

4

与 :

u.FriendID.CompareTo(startUser) > 0

?

于 2013-01-13T16:11:06.420 回答
0

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

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

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

它可能看起来像:

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);
于 2016-12-02T15:27:12.197 回答
-2

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

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

两个向导,但哪个更大?你放弃 - 并计算十六进制的总数吗?或者如何在 - 之间添加十六进制的总和?

它只是没有完成(尽管它可能是)

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

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

于 2013-01-13T16:14:30.400 回答