【问题标题】:Why memory list contains worked as case insensitive?为什么内存列表包含不区分大小写?
【发布时间】:2019-01-04 20:06:48
【问题描述】:

我有一个来自 MySQL 的内存列表和对象

requiredUserNames: 调用 "where users.Contains(us.Username)" 为什么它不区分大小写包含 where users 是内存列表对象(普通 c# 对象)而第二个工作正常,因为 C# 区分大小写:

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();

【问题讨论】:

    标签: c# mysql linq .net-core


    【解决方案1】:

    users 是一个本地列表,这是真的。但是,_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();
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2023-04-02
      • 1970-01-01
      • 2011-10-20
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      相关资源
      最近更新 更多