在Linq请求中连续选择SelectMany

时间:2015-10-24 00:28:20

标签: c# asp.net entity-framework linq

我首先使用EF代码构建了三个表。 我尝试使用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,而我找不到获取所有上述字段的方法。有什么建议吗?

1 个答案:

答案 0 :(得分: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
    };