【问题标题】:Two identical queries returning two different values. C# .Net Core EF Core两个相同的查询返回两个不同的值。 C# .Net Core EF Core
【发布时间】:2020-02-16 04:01:31
【问题描述】:

场景

这适用于使用 DSharp 库的不和谐机器人。现在在这种情况下,当我在不和谐中以!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 字符串的查询则返回空值。是的,我确实在“if”语句之前放置了一个断点,只是为了确保message 字符串不为空,而事实并非如此。它与上下文具有相同的值。

    [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);
    }

【问题讨论】:

  • 埃文斯,我已经编辑了这个问题,它的方式更有意义。让我知道这是否可以
  • 是的,很好!

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


【解决方案1】:

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

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

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

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

正如你在这里看到的,我没有修剪这个字符串,所以开头仍然有空格。

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

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

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2021-07-15
    • 2023-03-31
    相关资源
    最近更新 更多