Как выполнить сравнение 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, а не сравнение строк.