gpt4 book ai didi

c# - 可以查询 NotMapped 属性吗?

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:47 25 4
gpt4 key购买 nike

我首先使用 EF6 代码,然后我使用了 this答案映射List<stirng>在我的实体中。

这是我的类(class)

    [Key]
public string SubRubro { get; set; }
[Column]
private string SubrubrosAbarcados
{
get
{
return ListaEspecifica == null || !ListaEspecifica.Any() ? null : JsonConvert.SerializeObject(ListaEspecifica);
}
set
{
if (string.IsNullOrWhiteSpace(value))
ListaEspecifica.Clear();
else
ListaEspecifica = JsonConvert.DeserializeObject<List<string>>(value);
}
}

[NotMapped]
public List<string> ListaEspecifica { get; set; } = new List<string>();

它非常适合将我的列表存储为 Json,但现在我需要执行一个 linq 查询,我正在尝试这个

var c = db.CategoriaAccesorios.Where(c => c.ListaEspecifica.Contains("Buc")).First();

它正在 throw

System.NotSupportedException: The specified type member 'ListaEspecifica' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

什么是合乎逻辑的。

有什么方法可以执行这样的查询吗?

最佳答案

这里的问题是 LINQ to Entities 不理解如何将您的查询转换为后端 (SQL) 语言。因为您没有实现(即转换为 .NET)查询的结果, 直到您对其进行过滤,LINQ 尝试将您的查询转换为 SQL 本身。由于不确定如何执行此操作,您会得到一个 NotSupportedException

如果您首先具体化查询(即调用 .ToList())然后过滤,一切都会正常进行。不过,我怀疑这不是您想要的。 (即 db.CategoriaAccesorios.ToList().Where(c => c.ListaEspecifica.Contains("Buc")).First();)

作为this answer说明,您的问题是 EF 到 SQL 的转换。不过,显然您需要某种方法来解决它。

因为您是 JSON 序列化,所以这里实际上有几个选项,最特别的是使用 LIKE :

var c =
(from category
in db.CategoriaAccessorios
where SqlMethods.Like(c.SubrubrosAbarcados, "%\"Buc\"%")
select category).First()

如果是 EF Core,据称 Microsoft.EntityFrameworkCore.EF.Functions.Like 应该替换 SqlMethods.Like

如果您有 SQL Server 2016+,并强制 SubrubrosAbarcados 为 JSON 类型,则应该可以使用原始查询直接查询 JSON 列。

如果您对上述方面感到好奇,下面是它在 SQL Server 2016 中的示例:

CREATE TABLE Test (JsonData NVARCHAR(MAX))
INSERT INTO Test (JsonData) VALUES ('["Test"]'), ('["Something"]')
SELECT * FROM Test CROSS APPLY OPENJSON(JsonData, '$') WITH (Value VARCHAR(100) '$') AS n WHERE n.Value = 'Test'
DROP TABLE Test

关于c# - 可以查询 NotMapped 属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952852/

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