如果我将实体框架表达式存储为字符串,如下所示:
var exp = "from user in users where user.Id == 1 select user.Name";
有没有办法使用EF Core将其转换为SQL?
我不需要运行SQL,只需获取将生成的SQL.
如果我将实体框架表达式存储为字符串,如下所示:
var exp = "from user in users where user.Id == 1 select user.Name";
有没有办法使用EF Core将其转换为SQL?
我不需要运行SQL,只需获取将生成的SQL.
是的,可以运行存储在string
变量中的Linq表达式.为此,您需要导入Microsoft.CodeAnalysis.CSharp.Scripting
.
下面是您可以使用的代码片段
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
var users = new List<User>() { new User { Id = 1, Name = "John" }, new User { Id = 2, Name = "Jane" } };
var exp = "from user in users where user.Id == 1 select user.Name";
ScriptOptions options = ScriptOptions.Default.AddReferences(typeof(User).Assembly);
options = options.AddImports("System.Linq");
var filteredUsers = await CSharpScript.EvaluateAsync<IEnumerable<string>>(exp, options, new Globals{ users = users });
public class User
{
public int Id { get; set; }
public string? Name { get; set; }
}
public class Globals
{
public List<User> users;
}
因此,如果您可以执行一个表达式,您也可以将其编译为SQL查询.希望字符串表达式中的ToQueryString()
link1 link2可以帮助您获得SQL字符串
希望能有所帮助