2011-02-09 6 views
0

Im пытается получить все мои группы с связанными с ними объектами. И я также хотел бы фильтровать коллекцию BuildingPartData, не затрагивая ни одно из других объектов. Я в значительной степени пробовал все, что мог придумать, но не повезло.EF 4 Подкатегория фильтра

test.ContextOptions.LazyLoadingEnabled = false; 

     var buildingPartMainGroups = (from buildingPartMainGroup in test.BuildingPartMainGroup 
             from buildingPartSubGroup in buildingPartMainGroup.BuildingPartSubGroup 
             from buildingPart in buildingPartSubGroup.BuildingPart 
             from buildingPartData in buildingPart.BuildingPartData 
             where buildingPartData.StatusPendingApprove == true 
             //let buildingPartData = buildingPartMainGroup.BuildingPartSubGroup.Where(x => x.BuildingPart.Any(o => o.BuildingPartData.Any(y => y.StatusPendingApprove == true))) 
          select new 
          { 
           BuildingPartMainGroups = buildingPartMainGroup, 
           BuildingPartDatas = buildingPartData 

          }).ToList().Select(c => c.BuildingPartMainGroups); 

     foreach (var bb in buildingPartMainGroups) 
     { 
      foreach(var tt in bb.BuildingPartSubGroup) 
      { 
       foreach (var oo in tt.BuildingPart) 
       { 
        foreach (var ww in oo.BuildingPartData) 
        { 
         bool tes4t = ww.StatusPendingApprove; 
        } 
       } 
      } 
     } 

Вот это модель

http://mimo-design.com/model.png

Cant вставки изображения еще ..

var buildingPartMainGroups = test.BuildingPartMainGroup.Include("BuildingPartSubGroup.BuildingPart.BuildingPartData"). 
             Where(bpmg => bpmg.BuildingPartSubGroup. 
              Any(o => o.BuildingPart. 
               Any(x => x.BuildingPartData. 
                Any(u => u.StatusPendingApprove == true)))); 

Это только фильтруется мой BuildingPartMainGroup сущность. Я хотел бы, чтобы все мои BuildingPartMainGroup сущности, с условием/фильтр на BuildingPartData

+0

Немного больше документации об объектной модели/модели объекта может быть приятным. –

+0

Добавлена ​​модель :-) – mimo

+0

Это проясняет многое. Смотрите мой второй ответ! –

ответ

0

Вы уже думаете, что-то вроде:

context.BuildingPartMainGroup 
.Inlcude("BuildingPartSubGroups.BuildingParts.BuildingPartData") 
.Where<BuildingPartMainGroup>(bpmg => bpmg.BuildingPartSubGroups.Any<BuildingPartSubGroup>(etc... 
+0

Спасибо за ответ. Но это не сработало :-( – mimo

+0

У вас есть свойства навигации на месте: .Inlcude («BuildingPartSubGroups.BuildingParts.BuildingPartData»)? Иначе это не сработает. Проверьте свою модель сущности. У вас есть нормализованная база данных с иностранными ключи и т. д. Я советую вам сделать это, чтобы получить максимальную отдачу от EF. –

0

Вы не должны использовать. Любое оценивает значение boolean. Итак, что вы на самом деле делаете, это сборка BuildingPartMainGroup, которая имеет как минимум 1 BuildingPartSubGroup, которая имеет минимум 1 ..., которая имеет минимум одну BuildingPartData, которая имеет StatusPendingApprove == true.

Попытайтесь рассмотреть цепочку, где <>() метод расширения полностью вниз по графу объекта.

Надеется, что это помогает ...

EDIT:

context.BuildingPartMainGroups 
    .Inlcude("BuildingPartSubGroups.BuildingParts.BuildingPartData") 
    .Where<BuildingPartMainGroup> 
    (bpmg => bpmg.BuildingPartSubGroups.Where<BuildingPartSubGroup> 
    (bpsg => bpsg.BuildingParts.Where<BuildingPart> 
    (bp => bp.BuildingPartData"s".Where<BuildingPartData> 
    (bpd => bpd.StatusPendingApprove == true)))) 

Интересно, если вам нужно включить здесь. Если вас интересует только BuidlingPartMainGroups без связанных с ним данных, это необязательно.

Полезным советом может быть использование SQl Profiler для просмотра точного SQL-запроса, который генерирует EF. таким образом вы получите больше понимания в том, что генерирует ваш запрос LinqToEntities для SQL.

+0

Я вижу, вы можете привести пример? Cant выяснить, как цепочки, где расширение: -/ – mimo

+0

Спасибо, что помогли мне здесь. с SQL Profiler, я смотрю на это. Последний оператор в приведенном вами примере возвращает IEnumerable , но где за исключением логического – mimo

+0

Решено ли это сейчас? Или нужна дополнительная помощь? Хорошим советом будет чтение программы Джули Лерман Entity Framework! –

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