Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用存储JSON的EF和SQL文本列启动/contains_C#_Sql_Entity Framework - Fatal编程技术网

C# 如何使用存储JSON的EF和SQL文本列启动/contains

C# 如何使用存储JSON的EF和SQL文本列启动/contains,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一个表,其中nvarchar(max)列存储json,如下所示 {“状态”:“存档”,“旧类别”:{“名称”:“长寿命”- 牛奶、产品:{“tagPrice1Notes”:“800次 例如,“columnType2”:“columnType3”:“someValue3”,“columnType4”:“someValue4”,“columnType5”:“someValue5”,“columnType6”:“someValue6”,“columnType7”:“someValue7”},“mo

我有一个表,其中nvarchar(max)列存储json,如下所示

{“状态”:“存档”,“旧类别”:{“名称”:“长寿命”- 牛奶、产品:{“tagPrice1Notes”:“800次 例如,“columnType2”:“columnType3”:“someValue3”,“columnType4”:“someValue4”,“columnType5”:“someValue5”,“columnType6”:“someValue6”,“columnType7”:“someValue7”},“moreProperties”:……等等

现在我需要得到所有列,其中值以上面的字符串开头,但是我得到了0行,这是我正在尝试的

 var matchMe = (
                "{'status':'Archieved'" +
                "','oldCategories': {'name': '" + someObject.Name +
                "','products': {'tagPrice1Notes': '" + someObject.C1 +
                "','columnType2': '" + someObject.C2 +
                "','columnType3': '" + someObject.C3 +
                "','columnType4': '" + someObject.C4 +
                "','columnType5': '" + someObject.C5 +
                "','columnType6': '" + someObject.C6 +
                "','columnType7': '" + someObject.C7 +
                "'}}"
                );
dbContext.CategoriesProducts.Where(x => x.MyJsonDetailsColumn.ToUpper().Trim().Contains(matchMe.ToUpper().Trim()))
.ToList();

这是一个临时修复,我们稍后将进行重构。

您的示例代码基本上将把所有数据读回您的客户端(ToUpper/Trim部分将意味着这是客户端检查),那么为什么不读取所有数据,将其反序列化为一个对象,并对需要比较的字段执行适当的比较?

文本使用双引号,而代码使用单引号,例如
“status”
/
'status'
。检查拼写。“Archived”-数据中的拼写是否错误,是否可以存档或实现?此外,您的查询在字段名和值之间有空格,而示例中没有。此外,这似乎不是一个好方法。将自定义JSON与DB进行比较容易出错(如额外的空格)而且它会很快变得非常缓慢和低效。反序列化不会花费更多的时间,比如说现在的2000行,搜索与反序列化2000行实际上并不是很多数据。如果你担心,那么测量一下,但我怀疑它是否那么糟糕。你说这是一个临时修复。它将比拉将整个表发送给客户端,然后查看字符串。或者使用全文索引搜索字符串。此建议的解决方案干净、简单,并且您不需要费劲地查找额外/缺少的空格、引号、逗号等。