Как выполнить сравнение GUID без учета регистра с LINQ?
в коде ниже я хочу сравнить два 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;
но я все еще не получаю никаких совпадений.
4 ответов
Не знаю, почему вы сравниваете их как текст, но вместо 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
У меня всегда была диллема использования == для сравнения столбцов guid/uniqueidentifier в операторах linq (особенно в предложении where), поэтому я выбрал довольно безопасный маршрут использования - (entityGuidColumn.CompareTo (guidParameter)==0). Это сработало для меня. Попытаться сделать что-либо.
простой способ игнорировать случай при выполнении сравнения строк - это просто преобразовать все в нижний (или верхний) регистр, прежде чем сравнивать его. Итак:
var userTasks = dc.tasks.Where(t => t.user_id.ToString().ToLower() == userId.ToString().ToLower()).ToList();
при этом я согласен с другими комментаторами, что вы должны использовать собственное сравнение GUID, а не сравнение строк.