在C#程序中,存储查询的正确方法是什么?

3

我已经编写了一个程序,使用Azure API对Azure日志分析存储库运行查询。

用于编写此查询的语言称为Kusto。

我有很多Kusto查询,直接在我的C#代码中使用。

类似这样:

Client.ExecuteQuery(@"Heartbeat 
| summarize LastCall = max(TimeGenerated) by Computer 
| where LastCall < ago(15m)
| take 20");

一些查询语句非常长,使代码变得非常丑陋。

是否有更好、更合适的方法将这些查询语句存储在数据库中,以便从代码中删除它们。


T4 运行时文本模板? - Daniel Mann
除非你需要在运行时更改它们,否则我建议避免将它们放在数据库中。我建议使用资源文件(RESX)或仅将其存储在与代码一起编译的单独文件中。也许 Client.ExecuteQuery 甚至支持指定一个文件? - Xerillio
2个回答

2

对于EF迁移,我使用存储在数据层库中的资源中的SQL语句,然后像这样调用:

Original Answer翻译成"最初的回答"

private string ReadSqlFile(string relativePath)
{
    var path = Path.Combine(AppContext.BaseDirectory, relativePath);
    return File.ReadAllText(path);
}

protected override void Up(MigrationBuilder migrationBuilder)
{
    //some migrations methods
    var script = ReadSqlFile("Migrations/DataMigration/AddNewCountryFieldToStudent.sql");
    migrationBuilder.Sql(script);
}

将其存储在单独的文件中非常有用。还要记得将属性更改为本地复制。


Original Answer 翻译成 "最初的回答"

2
你可以将查询保存为文本文件,与源代码一起,并将其作为“嵌入式资源”打包到应用程序中。
这个帖子中的被接受的回答解释了如何做:How to read embedded resource text file 你也可以通过你喜欢的搜索引擎找到大量的示例和教程;尝试搜索“c# 嵌入式资源”。

这里提供的链接有一些关于该主题的好答案。我能够使用其中之一来实现一个使用文本文件作为嵌入式资源的解决方案。 - SendETHToThisAddress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接