- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我首先使用 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/
我已经设置了我的 EF 代码优先数据库,但想要添加其他派生属性。 (是的,它应该在 View 模型中,我们可以下次再讨论为什么会这样。)我创建了一个扩展实际表类的部分类。如果我将 [NotMapped
我首先使用 EF6 代码,然后我使用了 this答案映射List在我的实体中。 这是我的类(class) [Key] public string SubRubro { get; set
我无法在实体属性上使用 [NotMapped] 属性,因为迁移添加命令在下面抛出错误; 这是我的POCO; using System; using System.Collections.Generic
我正在使用 EF Core 3.0 将数据从 SQL Server 存储过程提取到名为 Recipient 的对象模型中。 Recipient 模型定义了几个属性,EnvelopeId 和 Name,
为什么在下面的示例中需要 [NotMapped] 属性: public virtual ICollection Blogs { get; set; } [NotMapped] public L
我刚刚将 entityframework 更新到最新的 5.0.0 版本。 NotMapped 注释现在不起作用。我试图在谷歌上搜索修复它的答案,但找不到。当您更新 Entity Framework
我有一个运行良好的实体,但我需要添加来自另一个表的附加属性。我没有创建 View 的能力,所以我只想添加一个 [NotMapped] 字段,然后使用 Context.Database.SqlQuery
我有一些模型类用作 Entity Framework 代码优先模型。我在这些模型上有一些不属于数据库模式的属性,为了确保 Entity Framework 不会混淆,我用 [NotMapped] 属性
我正在开发一个 asp.net mvc-5 网络应用程序,我正在使用 Entity Framework 5.0。我映射了创建 .edmx 文件的 SQL 服务器数据库表。现在我想扩展模型类以具有额外的
我是 laravel 的新手,因此我的问题对某些人来说可能很奇怪。好吧,我的问题是如何在 Laravel Model 类中编写一个实体,该实体在迁移后不会在数据库中创建任何字段。例如 class Jo
我在尝试保存更改时收到以下异常:System.Data.SqlClient.SqlException:列名“ClientID”无效。列名称“ID”无效。 ClientID 属性有一个 [NotMapp
我有一个用 context.Database.SqlQuery("MyProc") 执行的存储过程 MyObject有一个只读属性: [NotMapped] public bool IsSomethi
我有一个 WebAPI 后端,它使用 ODATA v3 向各种客户端提供库存信息等(由于我们使用的组件的限制,我不能使用 v4)。库存数据库非常大(超过 10 万条记录),ODATA 非常适合服务器端
有时从这样的基类派生我的实体很有用: public abstract class DestructableBase : IDestructable { /// /// If true,
我将 WCF 数据服务用于返回 JSON 响应的 RESTful API。 考虑这个对象: [Table("person")] public class Person { [Column("d
我有以下类(class): public class Contact { public int ContactID { get; set; } public string FirstN
这是一个有点复杂的问题,请耐心等待。我们目前在我们的服务器上使用 Entity Framework 6.1.1,在客户端使用 OData 5.6 和 Breeze JS 1.5.4。简而言之,我们在将
我已经开始玩 Dapper.Net,到目前为止我真的很喜欢它 - 然而,我遇到了一个问题。 假设我有一个 POCO 类: public class Person { public string
我已经开始玩 Dapper.Net,到目前为止我真的很喜欢它 - 然而,我遇到了一个问题。 假设我有一个 POCO 类: public class Person { public string
我正在尝试弄清楚如何将 NotMapped 属性与 OData 结合使用 我有这个用户模型: [DataContract] public class User { [DataMember] publi
我是一名优秀的程序员,十分优秀!