Linq请求中的连续SelectMany

本文关键字:连续 SelectMany 请求 Linq | 更新日期: 2023-09-27 18:19:05

我首先用EF代码构建了三个表。我尝试用SelectMany检索一些信息,这样我就可以平面化查询,只获取这三个表中我需要的字段。我的表格如下:


Tables: productopoptions *-* 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,我找不到一种方法来获得上述所有字段。任何建议吗?

Linq请求中的连续SelectMany

我认为在您的情况下,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
    };