Помощь с Entity Query - PullRequest
       25

Помощь с Entity Query

2 голосов
/ 06 ноября 2010

Я не могу понять, как правильно написать этот запрос. Я пробовал разные комбинации, но пока ничего не получалось.

Ниже приведена соответствующая часть моей модели базы данных: alt text

Мне нужно выбрать продукты, которые соответствуют данной категории и группе, и которые соответствуют данному году, марке, модели, подмодели. Это я сделал ниже:

 ItemList = From P In gDataContext.Products.Include("Groups").Include("Groups.Category1").Include("LookupYearMakeModels") From G In P.Groups Where G.Category = Cat And G.Grp = Group  From Y In P.LookupYearMakeModels Where Y.Year = YMM.Year And Y.Make = YMM.Make And Y.Model = YMM.Model And Y.Submodel = YMM.Submodel Select P

Теперь мне также нужно выбрать продукты, которые соответствуют категории и группе, но являются универсальными (Product.Univeral = True).

В настоящее время я пишу два запроса, один выше и один ниже. Я объединяю результаты двух, просто используя ItemList.AddRange (ItemList2)

ItemList2 = From P In gDataContext.Products.Include("Groups").Include("Groups.Category1") where P.Universal From G In P.Groups Where G.Category = Cat And G.Grp = Group  Select P

Но я хочу объединить оба запроса в один и избежать слияния результатов. Как я могу это сделать?

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Я попытался установить аналогичную модель, и я считаю, что это работает.Здесь я выбираю продукты, у которых есть группа, соответствующая данной категории и группе, и которые имеют соответствующий год / марку / модель / подмодель или являются универсальными.

ItemList = From P In gDataContext.Products.Include("Groups").Include("Groups.Category1").Include("LookupYearMakeModels") 
           Where P.Groups.Any(Function(G) G.Category = Cat And G.Grp = Group) _
                And ( _
                        P.LookupYearMakeModels.Any(Function(Y) Y.Year = YMM.Year And Y.Make = YMM.Make And Y.Model = YMM.Model And Y.Submodel = YMM.Submodel) _
                        Or _
                        P.Universal = True _
                    )
           Select P

HTH

0 голосов
/ 06 ноября 2010

Вы можете использовать Метод IQueryable.Union:

ItemList = (From P In gDataContext.Products                                 
                                  .Include("Groups.Category1")
                                  .Include("LookupYearMakeModels") 
            From G In P.Groups 
                Where G.Category = Cat And G.Grp = Group  
            From Y In P.LookupYearMakeModels 
                Where Y.Year = YMM.Year 
                     And Y.Make = YMM.Make And Y.Model = YMM.Model 
                     And Y.Submodel = YMM.Submodel 
            Select P)
            .Union(
            From P In gDataContext.Products                     
                                  .Include("Groups.Category1")
            Where P.Universal
            From G In P.Groups Where G.Category = Cat And G.Grp = Group
            Select P)
...