asp.net Select Many on Json Array列

r1wp621o  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(141)

在我的项目中,我有表与JSON数组列
表A

Id,  Col1, Col2, JsonArrayCol, Col3
123, Val1, Val2, Json*       , Val3

字符串
Json*:

[
   {
      "Type" : "StandardType",
      "Amount" : "1"
      // a lot more properties
   },
   {
      "Type" : "StandardType",
      "Amount" : "2"
   },
   {
      "Type" : "OtherType",
      "Amount" : "3"
   },   {
      "Type" : "SuperType",
      "Amount" : "4"
   },
]


在一些标准场景中,我们需要将表中的行连接到json数组中的对象。
例如,如果filter设置为“StandardType”和“SuperType”,则结果应为:

123, Val1, Val2, JsonValues ("Type" : "StandardType", "Amount" : "1") , Val3
123, Val1, Val2, JsonValues ("Type" : "StandardType", "Amount" : "2") , Val3
123, Val1, Val2, JsonValues ("Type" : "SuperType"   , "Amount" : "4") , Val3


解析JSON数组以建模.NET Core原因空集基于此主题中的答案作为实现我的要求的第一步,我试图使用SelectMany(LinqToSQL):

var searchContacts = context.SearchContacts
            .SelectMany(x => x.Numbers)
            .ToList();


我得到错误:
无法转换LINQ表达式“x => x.Numbers”。请以可转换的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsAsyncEnumerable "、”ToList“或”ToListAsync“的调用来显式切换到客户端计算。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。”

pw136qt2

pw136qt21#

从数据库获取数据后,可能需要在客户端执行部分查询

var filterTypes = new[] { "StandardType", "SuperType" };

var result = context.SearchContacts
    .Where(a => filterTypes.Any(filterType =>
        a.JsonArrayCol.Any(item =>
            item.Type == filterType)))
    .Select(a => new
    {
        a.Id,
        a.Col1,
        a.Col2,
        JsonValues = a.JsonArrayCol
            .Where(item => filterTypes.Contains(item.Type))
            .ToList(),
        a.Col3
    })
    .ToList();

字符串

相关问题