Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对guid与LINQ进行不区分大小写的比较?_C#_.net_Linq_.net 4.0_Asp.net Membership - Fatal编程技术网

C# 如何对guid与LINQ进行不区分大小写的比较?

C# 如何对guid与LINQ进行不区分大小写的比较?,c#,.net,linq,.net-4.0,asp.net-membership,C#,.net,Linq,.net 4.0,Asp.net Membership,在下面的代码中,我想比较两个guid。问题是我没有得到任何返回的任务,因为guid的大小写不同(大写和小写)。我需要执行不区分大小写的比较 MembershipUser membershipUser = Membership.GetUser(); string strUserId = membershipUser.ProviderUserKey.ToString(); Guid userId = new Guid(strUserId.ToUpper()); lblUserId.Text =

在下面的代码中,我想比较两个guid。问题是我没有得到任何返回的任务,因为guid的大小写不同(大写和小写)。我需要执行不区分大小写的比较

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\u id==userId
而不是
t.userId.Equals(userId,StringComparison.OrdinalIgnoreCase)
Guid上的==重载,因此不需要比较字符串表示形式


请参见

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

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

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

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

为什么要将Guid作为字符串进行比较,而不是像
System.Guid那样进行比较?@Matt-如何转换为Guid?我找了一个Convert.ToGuid(或类似的东西),但找不到任何东西。你可以使用
Guid.Parse(…)
Guid.TryParse(…)
Guid.TryParseExact(…)
使用
StringComparison
而不是
ToLower()
ToUpper()
从石器时代开始这就消耗了更多的内存(这可能是一个重要的瓶颈,取决于“任务”中有多少任务)并且可能会根据区域设置给出错误的结果。我知道这会搅乱内存-我主要处理内存和计算周期便宜的问题,这会让我过于懒惰。但是,我不知道它会给出错误的结果。感谢你的掌掴,我将不得不了解更多(一如既往)…注意,equals要求用户标识非空。请使用StringComparer.OrdinalingOreCase.equals(str1,str2)或
String.equals(x,y,StringComparation.OrdinalingOreCase)
文档没有明确说明比较处理了案例。是否这样做?我们如何确定?是否同时支持
=
!=