两个相同的查询返回两个不同的值。 C#.Net核心EF核心

时间:2020-02-15 12:28:46

标签: c# .net-core entity-framework-core

场景

这是使用DSharp库的不和谐的bot。现在在这种情况下,当我在不和谐的情况下以!status testmenu聊天命令时,上下文的内容将为!status testmenu。因此,为了从邮件正文中隔离commandprefix,我创建了一个新字符串message,该字符串仅包含邮件正文(testmenu),如以下行所示

 string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);

但是同时,参数content仅返回消息正文。因此,在if条件之前,contentmessage相等,包括大小写敏感。

因此messagecontent都具有一个字符串值testmenu

重复的原因:受控测试。

问题

当我用第一个字符串message查询数据库时,返回空值。 但是,当我使用第二个字符串content(通过参数)查询数据库时,我得到了返回的适当记录。但是请记住,messagecontent都是相同的字符串,包括区分大小写。

我试图在彼此之间交换查询语句,只是为了确保它不是顺序错误,而不是顺序错误。每次都是一样的结果。使用参数字符串的查询始终返回一个值,而使用message字符串的查询返回null。是的,我的确确实在“ if”语句之前放置了一个断点,只是为了确保message字符串不为null,也不为空。它具有与上下文相同的值。

    [Command("status")]
    public async Task Status(CommandContext context, string content)
    {
        string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);
        Models.Menu SelectedMenu;

        if (!String.IsNullOrEmpty(message))
        {           
           //returns null
            SelectedMenu = await _context.Menus.FirstOrDefaultAsync(m => m.Menu_Name.ToLower().Contains(message)).ConfigureAwait(false);

        }

        //returns appropriate record
        var menu = await _context.Menus.FirstOrDefaultAsync(m => m.Menu_Name.ToLower().Contains(context.Message.Content)).ConfigureAwait(false);
        await context.Channel.SendMessageAsync(menu.Status.ToString()).ConfigureAwait(false);
    }

1 个答案:

答案 0 :(得分:0)

这乍看之下是一个愚蠢的错误,并不那么明显。

string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);

context.Message.Content,其中“内容”的值为"!status testmenu"

context.Command.Name的值为"status",我向子字符串添加+1以删除初始的“!”也一样所以现在字符串的值是" testmenu"

正如您在此处看到的那样,我没有修剪此字符串,因此开头仍留有空白。

对于Visual Studio中的人来说,当您在调试时将鼠标悬停在变量上时,它们似乎相同,但事实并非如此,因为开始时确实存在空白,因此为什么在我尝试查询数据时收到空值。

一旦我修剪了字符串并运行了查询,一切都会正常进行。