请帮帮我。 我尝试在.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);
答案 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-70867728950e
和
7c9e6679-7425-40de-944b-e07fc1f90ae7
两个Guids但哪个更大?你放弃 - 并计算十六进制的总数?或者如何在-?
之间添加HEX的总和它只是没有完成(虽然它可能是)
应用逻辑==和!=确实有意义。 Guid结构会使==和!=运算符重载,因此使用它们也可以轻松比较字符串值,即
var isEqual = guid.ToString().Equals(otherGuid.ToString());