2015-04-23 2 views
1

У меня есть следующий запрос, где Nodes является навигационным свойством внутри MonProfiles.LINQ to JSON - Выбрать Индивидуальные свойства принадлежат навигационному свойству

var nodes = await dbContext.MonProfiles.Include(x => x.Nodes). 
      Where(x => x.Id == profileId). 
      Select(x => x.Nodes. 
       Select(y => new { y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName })). 
       ToListAsync(); 

return Json(new { nodes }); 

Проблема я столкнулся в том, что возвращаемые JSON в массив в массиве:

{ 
    "nodes": [[{ 
     "NodeNativeId": 1234567, 
     "NodeClassId": 9999, 
     "NodeName": "TestName", 
     "ClassName": "TestClassName" 
    }]] 
} 

Что я хотел бы вернуться является:

{ 
    "nodes": [{ 
     "NodeNativeId": 1234567, 
     "NodeClassId": 9999, 
     "NodeName": "TestName", 
     "ClassName": "TestClassName" 
    }] 
} 

Это мой первый используя LINQ, чтобы выбрать только отдельные свойства, принадлежащие свойству Navagation, и это первый раз, когда я столкнулся с этим типом результата из-за этого. Как я могу исправить свой запрос LINQ, чтобы я ожидал вывод JSON?

ответ

5

Попробуйте выбрать многие вместо

var nodes = await dbContext.MonProfiles.Include(x => x.Nodes). 
     Where(x => x.Id == profileId). 
     SelectMany(x => x.Nodes. 
      Select(y => new { y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName })). 
      ToListAsync(); 

Это эффективно разглаживает список список

+0

Это будет первый выбор, второй или оба? – blgrnboy

+0

Отредактировано для наживы – Dom

+0

Спасибо! Это сработало. Я одобрю ответ, как только мне позволено (9 минут). – blgrnboy

0

Он также должен работать с

return Json(nodes); 

вместо

return Json(new { nodes }); 

Я m wri с телефона, поэтому я не тестировал его.

Смежные вопросы