簡體   English   中英

兩個相同的查詢返回兩個不同的值。 C# .Net 核心 EF 核心

[英]Two identical queries returning two different values. C# .Net Core EF Core

設想

這是針對使用 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);
    }

這是一個愚蠢的錯誤,但乍一看,並不那么明顯。

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 中的人眼,當您在調試時將鼠標懸停在變量上時,它們可能看起來相同,但事實並非如此,因為開頭確實有一個空格,因此為什么我在嘗試時收到空值來查詢數據。

一旦我修剪了字符串並運行了查詢,一切都會正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM