) , MainDistinct as ( select distinct Code , MName from Flat ) , FlavorDistinct as ( select distinct Code , ChildCode , FName from Flat ) select * , 0 as Active , ( select * , 0 as Active from FlavorDistinct FD where FD.Code = MD.Code for json path ) as Flavors from MainDistinct MD
大概長這樣
1 2 3
A 魚 0 [{"Code":"A","ChildCode":"X01","FName":"芥末","Active":0},{"Code":"A","ChildCode":"X02","FName":"起司","Active":0},{"Code":"A","ChildCode":"X03","FName":"日式","Active":0}] B 牛 0 [{"Code":"B","ChildCode":"X01","FName":"芥末","Active":0},{"Code":"B","ChildCode":"Y01","FName":"川辣","Active":0}] C 雞 0 [{"Code":"C","ChildCode":"X02","FName":"麻辣","Active":0},{"Code":"C","ChildCode":"Y01","FName":"川辣","Active":0},{"Code":"C","ChildCode":"Z01","FName":"菠菜","Active":0},{"Code":"C","ChildCode":"Z02","FName":"巧克力","Active":0}]
最後只要讓最終結果也轉為 json 即可 , 另外預設的欄位名稱會很醜類似這樣 JSON_FFWFW-F1234-1234-2424-AGWE-1232 , 所以要多包子查詢給 alias
var result = await _dbContext.MyTree.FromSqlRaw(sql).ToListAsync(); var serializeOptions = new JsonSerializerOptions(); serializeOptions.Converters.Add(new BoolConverter()); var tree = JsonSerializer.Deserialize<IEnumerable<Main>>( result.FirstOrDefault().Tree, serializeOptions );