2015-10-24 31 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 
    };