Как выполнить нечувствительный к регистру сравнение GUID с LINQ?

В приведенном ниже коде я хочу сравнить два GUID. Проблема в том, что я не получаю никаких возвращенных задач, потому что GUIDS - это разные случаи (в верхнем и нижнем регистре). Мне нужно выполнить нечувствительность к регистру.

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 userId = (Guid) membershipUser.ProviderUserKey;

BUt Я все еще не получаю никаких совпадений.

Ответы

Ответ 1

Не знаете, почему вы сравниваете их как текст, но вместо t.user_id == userId используйте t.userId.Equals(userId, StringComparison.OrdinalIgnoreCase)

Ответ 3

У меня всегда была dillema использования сравнения столбцов guid/uniqueidentifier == в выражениях linq (особенно в предложении where), поэтому я взял довольно безопасный способ использования - (entityGuidColumn.CompareTo(guidParameter) == 0). Это сработало для меня. Сделайте снимок.

Ответ 4

Простой способ игнорировать случай при сравнении строк - это просто преобразовать все в нижний (или верхний) случай, прежде чем сравнивать его. Итак:

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

Сказав это, я согласен с другими комментаторами в том, что вы должны использовать собственное сравнение GUID, а не сравнение строк.