У меня есть список памяти и объекты из 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();
пользователи - это локальный список, это правда. 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();