Почему список памяти содержит регистр без учета регистра?

0

У меня есть список памяти и объекты из MySQL

requiredUserNames: вызывает "where users.Contains(us.Username)", почему он работал как нечувствительный к регистру, содержит, где пользователи представляют собой объект списка памяти (обычный объект С#), а второй работает нормально, поскольку С# работает как чувствительный к регистру:

var users = (from u in _dbContext.MyUser
             select new 
             {
                 UserName = u.UserName
             }).ToList();

var requiredUserNames = (from us in _dbContext.NextUsers
                    // users is a memory list and not a database list why executed as case insensitive
                   where users.Contains(us.Username)
                   select new { Username = us.Username}).ToList();


var requiredUserNames02 = (from us in _dbContext.NextUsers
                        // here working normally as case sensitive
                     where users.FindIndex((usr) => usr.Username.Equals(us.Username)) > -1
                   select new { Username = us.Username }).ToList();
Теги:
linq
.net-core

1 ответ

1
Лучший ответ

пользователи - это локальный список, это правда. BUT, _dbContext.NextUsers удален, и вы спрашиваете у своего экземпляра MySQL что-то вроде:

select us.* from NextUsers us where us.UserName in ('theNameFromLocalList','...')

IOW это MySQL, который делает нечувствительный поиск. Если вы этого не сделаете, это будет более дорогостоящим, но:

var requiredUserNames = (from us in _dbContext.NextUsers.AsEnumerable()
                    // users is a memory list and not a database list why executed as case insensitive
                   where users.Contains(us.Username)
                   select new { Username = us.Username}).ToList();
  • 0
    спасибо, мне просто нужно знать почему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню