以下のコードでは、2つの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を比較して、大文字と小文字を区別せずに一致するものを見つけるにはどうすればよいですか?
UPDATE 1は、メンバーシッププロバイダーからGUIDへのGUIDをカバーするようになりました
Guid userId = (Guid) membershipUser.ProviderUserKey;
しかし、私はまだ一致するものを取得していません。
それらをテキストとして比較している理由はわかりませんが、_t.user_id == userId
_の代わりにt.userId.Equals(userId, StringComparison.OrdinalIgnoreCase)
を使用してください
==はGuidでオーバーロードされるため、文字列表現を比較する必要はありません。
http://msdn.Microsoft.com/en-us/library/system.guid.op_equality(v = VS.90).aspx を参照してください。
Linqステートメント(特にwhere句)でguid/uniqueidentifier列の比較に==を使用するというジレマが常にあったので、-(entityGuidColumn.CompareTo(guidParameter)== 0)を使用するというかなり安全なルートを取りました。これは私のために働いた。試してみます。
文字列比較を行うときに大文字と小文字を無視する簡単な方法は、比較する前にすべてを小文字(または大文字)に変換することです。そう:
var userTasks = dc.tasks.Where(t => t.user_id.ToString().ToLower() == userId.ToString().ToLower()).ToList();
そうは言っても、文字列比較ではなく、ネイティブGUID比較を使用する必要があるという他のコメント提供者に同意します。