>>),但对其他的有问题(例如 @>) 目标: 在-6ren">
gpt4 book ai didi

c# - .NET 核心 Entity Framework - 转义 "@"字符

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:34 24 4
gpt4 key购买 nike

简介
我正在使用 PostreSQL JSON support这给了我一个强大的 API,但它包含一些奇怪的字符。
EF 处理了其中的一些(例如 ->>>),但对其他的有问题(例如 @>)

目标:
在 .net 核心 EF 中将以下查询作为原始查询执行:

SELECT * FROM todoitem WHERE "JsonPayload" @> '{"ListProp": [{"Name": "listProp1Name", "Value": "listProp1Value"}]}'

现状

string select = "SELECT * FROM todoitem";
string where = "WHERE \"JsonPayload\" @>";
string listQuery = "'{\"ListProp\": [{\"Name\": \"listProp1Name\", \"Value\": \"listProp1Value\"}]}'";

string query = $"{select} {where} {listQuery}";
Console.WriteLine(query);

var items = _context.TodoItems.FromSql(query).ToList();

注意:请不要怪我这里的字符串分离。我只是在缩小问题范围。输出字符串与我在数据库(它工作的地方)中执行的字符串完全相同。

问题
看起来 @ 字符是罪魁祸首,因为它被解释为命名参数。
所以问题是 - 如何逃避它?

也有可能,方括号({})也会有问题,因为它们也被用作变量指示符。如果您知道如何逃避它们,也请写信。

显然,我试过谷歌搜索,但似乎转义 @ 符号并不常见。

堆栈跟踪:在两种情况下都是一样的 - 使用 @>@@> 时。

fail: Microsoft.EntityFrameworkCore.Query[10100]
An exception occurred in the database while iterating the results of a query for context type 'dotnet_postgres_test.Models.TodoContext'.
System.FormatException: Input string was not in a correct format.
at System.Text.StringBuilder.FormatError()

最佳答案

也许这不是一个确切的答案,但您可以使用 dapper

使用 dapper 你可以只写以下内容:

var connection = new NpgsqlConnection(_configuration.GetConnectionString("DefaultConnection"));

var items = connection
.Query<TodoItem>(
@"SELECT * FROM todoitem WHERE ""JsonPayload"" @> '{""ListProp"": [{""Name"": ""listProp1Name"", ""Value"": ""listProp1Value""}]}'")
.ToList();

关于c# - .NET 核心 Entity Framework - 转义 "@"字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54121580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com