【发布时间】:2020-02-16 04:01:31
【问题描述】:
场景
这适用于使用 DSharp 库的不和谐机器人。现在在这种情况下,当我在不和谐中以!status testmenu 聊天命令时,上下文的内容将是!status testmenu。因此,为了将command 和prefix 与消息正文隔离开来,我正在创建一个新字符串message,它只包含消息正文(testmenu),如本行所示。
string message = context.Message.Content.Replace(context.Message.Content.Substring(0, (context.Command.Name.Length + 1)), string.Empty);
但同时,参数content 也仅返回消息正文。所以在 if 条件之前,content 和 message 是相等的,包括区分大小写。
所以message 和content 都有一个字符串值testmenu。
重复的原因:受控测试。
问题
当我使用第一个字符串message 查询数据库时,我得到一个空返回。
但是,当我使用第二个字符串content(来自参数)查询数据库时,我会返回相应的记录。但是请记住,message 和 content 都是相同的字符串,包括区分大小写。
我尝试在彼此之间交换查询语句,以确保它不是顺序错误,而事实并非如此。每次都是一样的结果。带有参数字符串的查询总是返回一个值,而带有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