如何对GUID与LINQ进行不区分大小写的比较?
在下面的代码中,我想比较两个GUID。 问题是我没有返回任何任务,因为GUIDS是不同的情况(大写与小写)。 我需要执行不区分大小写的比较。
MembershipUser membershipUser = Membership.GetUser(); string strUserId = membershipUser.ProviderUserKey.ToString(); Guid userId = new Guid(strUserId.ToUpper()); lblUserId.Text = userId.ToString(); DataModelEntities dc = new DataModelEntities(); var userTasks = dc.tasks.Where(t => t.user_id == userId).ToList();
无论如何,我如何比较GUID并找到匹配?
更新1现在将会员提供商的guid转换为GUID
Guid userId = (Guid) membershipUser.ProviderUserKey;
我仍然没有得到任何比赛。
不确定为什么要将它们作为文本进行比较,而不是t.user_id == userId
使用t.userId.Equals(userId, StringComparison.OrdinalIgnoreCase)
= Gu在GUID上重载,因此您无需比较字符串表示。
请参阅http://msdn.microsoft.com/en-us/library/system.guid.op_equality(v=VS.90).aspx
我总是在linq语句中使用==进行guid / uniqueidentifier列比较的dillema(特别是在where子句中)所以我采用了一种相当安全的使用方法 – (entityGuidColumn.CompareTo(guidParameter)== 0)。 这对我有用。 试一试。
在进行字符串比较时忽略大小写的简单方法是在比较之前将所有内容转换为较低(或较高)的大小写。 所以:
var userTasks = dc.tasks.Where(t => t.user_id.ToString().ToLower() == userId.ToString().ToLower()).ToList();
话虽这么说,我同意其他评论者,你应该使用本机GUID比较,而不是字符串比较。