2

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

Ниже соответствующая часть моей модели базы данных: 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 

теперь я также должен выбрать продукты, которые соответствуют Категория и группа, но Universal (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 

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

Благодарим за помощь!

+1

я бы держаться подальше от использования резервных слов, как группы в качестве имени для одного из моих объектов. – JBrooks

ответ

2

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

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 

НТН

+0

Работал как шарм. Благодарю. – mga911

+0

@ mga911, отлично, рад, что он сработал. Означает ли это, что я получаю награду :)? –

+0

Да и я отметил ваш ответ как принятый ответ. Если бы он еще не начислял вам очки, тогда вы, вероятно, получите их, когда закончится открытый день выплаты. Еще раз спасибо – mga911

0

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

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) 
+0

Я ценю ответ, но я ищу способ сделать два запроса одним запросом, а не просто объединить результаты. – mga911