LINQ:Guid比较忽略大小写

时间:2013-06-14 21:49:20

标签: linq equals guid case-insensitive

我想检查是否存在guid类型的变量。我用了

new Db().JobCreate.Any(a => a.GuidVariable1.Equals(GuidVariable2, StringComparison.OrdinalIgnoreCase));

但我收到错误Member 'object.Equals(object, object)' cannot be accessed with an instance reference; qualify it with a type name instead 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我假设您有另一个名为GuidVariable2的实例变量。 除非涉及其他内容,否则我只需执行以下操作:

new Db().JobCreate.Any(a => a.GuidVariable1 == GuidVariable2);

如果变量实际上是string s,我会执行以下操作:

new Db().JobCreate.Any(a => a.GuidVariable1.ToLower() == GuidVariable2.ToLower());

根据评论更新: Guid表示十六进制数,因此alpha数字的大小写无关紧要。当表示为string时,大小写可以是Upper,Lower或组合,但实际数字是相同的:

var guid1 = Guid.Parse("a0449976-604e-4bdf-826d-234c4564c3e0");
var guid2 = Guid.Parse("A0449976-604E-4BDF-826D-234C4564C3E0");
var guid3 = Guid.Parse("A0449976-604E-4bdf-826d-234c4564c3e0");
guid1 == guid2; //true
guid2 == guid3; //true

答案 1 :(得分:0)

你走了:

new Db().JobCreate.Any(a => string.Equals(
    a.GuidVariable1, GuidVariable2, StringComparison.OrdinalIgnoreCase));

(这当然是假设您所谓的GUID实际上是字符串,如果您想要比较GUID,只需这样做:)

new Db().JobCreate.Any(a => a.GuidVariable1.Equals(GuidVariable2));