请帮我。我尝试在 .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);
请帮我。我尝试在 .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);
与 :
u.FriendID.CompareTo(startUser) > 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);
将大于或小于应用于 Guid 是没有意义的。
0f8fad5b-d9cb-469f-a165-70867728950e
和
7c9e6679-7425-40de-944b-e07fc1f90ae7
两个向导,但哪个更大?你放弃 - 并计算十六进制的总数吗?或者如何在 - 之间添加十六进制的总和?
它只是没有完成(尽管它可能是)
但是,应用逻辑 == 和 != 确实有意义。Guid 结构确实重载了 == 和 != 运算符,因此使用它们,您还可以轻松比较字符串值,即
var isEqual = guid.ToString().Equals(otherGuid.ToString());