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