2015-10-24 32 views
0

我有三個表首先用EF代碼構建。 我試着用SelectMany檢索一些信息,這樣我就可以扁平化查詢,並只獲得這三張表中我需要的字段。 我的表呈現如下:Linq請求中的連續SelectMany


表:ProductOptions * - * ProductOptionValues 1 * LanguageProductOptionValue


|ProductOptionID | OVPriceOffset  | LanguagesListID 
    |PriceOffset  | OptionValueCategory | ProductOptionValueName 
    |     | ...     | 

var queryCabColor = _db.ProductOptions 
      .Where(c => c.ProductOptionTypeID == 18 && c.ProductId == 1) 
      .SelectMany(z => z.ProductOptionValues, (productOptions, productOptionValues) 
      => new 
      { 
       productOptions.ProductOptionID, 
       productOptions.PriceOffset, 
       productOptionValues.OVPriceOffset, 
       productOptionValues.OptionValueCategory, 
       productOptionValues.ProductOptionValuesID, 
       productOptionValues.Value, 
       productOptionValues.LanguageProductOptionValue 
      }) 
      .SelectMany(d => d.LanguageProductOptionValue, (productOptionValues, productOptionValuesTranslation) 
      => new 
      { 
       productOptionValuesTranslation.LanguagesListID, 
       productOptionValuesTranslation.ProductOptionValueName 
      }) 
      .Where(y => y.LanguagesListID == currentCulture); 

到目前爲止,當我環在查詢我可以只檢索LanguagesListID和ProductOptionValueName,我找不到一種方法來獲取上述所有提到的內容d領域。任何建議?

回答

1

我認爲在你的情況下,Linq語法比明確的SelectMany更合適。像這樣的東西應該工作:

var queryCabColor = 
    from productOptions in db.ProductOptions 
    where productOptions.ProductOptionTypeID == 18 && productOptions.ProductId == 1 
    from productOptionValues in productOptions.ProductOptionValues 
    from productOptionValuesTranslation in productOptionValues.LanguageProductOptionValue 
    where productOptionValuesTranslation.LanguagesListID == currentCulture 
    select new 
    { 
     productOptions.ProductOptionID, 
     productOptions.PriceOffset, 
     productOptionValues.OVPriceOffset, 
     productOptionValues.OptionValueCategory, 
     productOptionValues.ProductOptionValuesID, 
     productOptionValues.Value, 
     productOptionValuesTranslation.LanguagesListID, 
     productOptionValuesTranslation.ProductOptionValueName 
    };