Выберите несколько уровней детей - PullRequest
2 голосов
/ 16 мая 2019

Я использую Entity Framework 6. В моей базе данных у меня есть следующие таблицы:

MasterTable ( Id , name)
    Child1 ( ID , name , vl1 , Master_ID)
    Child2 ( ID , name , vl2 , MasterID )
    Child3 (ID , name , vl3 , Master_ID )
        Child3Itm ( ID , name , Child3_ID)

Для данного элемента MasterTable я хочу загрузить один запрос из базы данных:

  • Все Child1, где vl1 > 5
  • Все Child2, где vl2 > 6
  • Все Child3, где vl3 > 7

И в каждом Child3 для загрузки всего контента Child3Itm.

Я использую этот запрос:

Dim lst = (From t In context.MasterTable.Where(Function(t1) t1.id = 7)
                 Select New With {
                                   t,
                                   .chld1 = t.child1s.Where(Function(t21) t21.vl1 >5),
                                   .chld2 = t.child2s.Where(Function(t31) t31.vl2>6 ),
                                   .chld3 = t.child3s.Where(Function(t41) t41.vl3>7).Select(Function(t411) t411.Child3Itms)
                                  }).ToList

Проблема в том, что Child3 не выбрано.Все остальные в порядке.Что я могу сделать?Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 16 мая 2019
Dim lst = (From t In context.MasterTable.Where(Function(t1) t1.id = 7)
             Select New With {
                               t,
                               .chld1 = t.child1s.Where(Function(t21) t21.vl1 >5),
                               .chld2 = t.child2s.Where(Function(t31) t31.vl2>6 ),
                               .chld3 = t.child3s.Where(Function(t41) t41.vl3>7),
                               .chld3itms = t.child3s.Where(Function(t51) t51.vl3>7).Select(Function(t511) t511.Child3Itms)
                              }).ToList
0 голосов
/ 17 мая 2019
Dim lst = (From t In context.MasterTable.Where(Function(t1) t1.id = 7)
              Select New With {
                           t,
                           .chld1 = t.child1s.Where(Function(t21) t21.vl1 >5),
                           .chld2 = t.child2s.Where(Function(t31) t31.vl2>6 ),
                           .chld3 = (From t2 in t.child3s.Where(Function(t41) t41.vl3>7) 
                                Select New With {
                                           t2,
                                           .chld3it=t2.Child3Itms   
                                                 })
                               }).ToList

Это тоже работает. Если кто-то может сказать мне, если этот ответ лучше или нет по сравнению с другим решением, опубликованным Антони ???

0 голосов
/ 16 мая 2019

Не видя ваших данных, будет сложно диагностировать. Но так как у вас есть доступ к отладчику, вы можете сделать это самостоятельно. С кодом ниже перешагните через каждую строку и проверьте переменные. Должно быть легко увидеть, где ваш код не работает

Dim masters = From t In context.MasterTable Where t = 7
Dim child1s = From m In masters Where m.child1s.vl1 > 5
Dim child2s = From m In masters Where m.child2s.vl2 > 6
Dim child3s = From m In masters Where m.child3s.vl3 > 7
Dim child3i = child3s.Child3Itms

Может быть опечатка в вашем вопросе. Убедитесь, что условие child3s правильное:

t41.vl>7

Должно ли это быть?

t41.vl3 > 7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...