如何对GUID和LINQ进行不区分大小写的比较?

时间:2011-04-20 02:58:26

标签: c# .net linq .net-4.0 asp.net-membership

在下面的代码中,我想比较两个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;

BUt我还没有得到任何比赛。

4 个答案:

答案 0 :(得分:34)

Guid上的==超载,因此您不需要比较字符串表示。

请参阅http://msdn.microsoft.com/en-us/library/system.guid.op_equality(v=VS.90).aspx

答案 1 :(得分:22)

不确定为什么要将它们作为文字进行比较,而不是t.user_id == userId使用t.userId.Equals(userId, StringComparison.OrdinalIgnoreCase)

答案 2 :(得分:3)

我总是在linq语句中使用==进行guid / uniqueidentifier列比较(特别是在where子句中),因此我采用了一种相当安全的使用方法 - (entityGuidColumn.CompareTo(guidParameter)== 0)。这对我有用。试一试。

答案 3 :(得分:2)

在进行字符串比较时忽略大小写的简单方法是在比较之前将所有内容转换为较低(或较高)的大小写。所以:

var userTasks = dc.tasks.Where(t => t.user_id.ToString().ToLower() == userId.ToString().ToLower()).ToList();

话虽如此,我同意其他评论者您应该使用本机GUID比较,而不是字符串比较。