LinqtoSQL SelectMany类型参数无法从使用中推断出来

时间:2014-02-03 11:23:34

标签: c# linq linq-to-sql

我正在尝试创建一个LINQ语句来压缩我的数据库中的一些数据。示例行可能如下所示:

LegislationCode LanguageCode
=============== ============
CHN | JPN | KOR ENG

我需要做的是展平这个数据集,以便我留下以下内容:

CHN ENG
JPN ENG
KOR ENG

这只是一个例子 - 数据库中还有更多需要这样做的事情。

我正在使用LINQtoSQL连接到我的数据库和以下查询(不编译)来尝试实现此目的:

var result = pContext.LanguageLegislations.AsEnumerable()
                     .Select(ll => new
                     {
                         LangCode = ll.LanguageCode,
                         LegCode = ll.LegislationCode.Split('|').ToList()
                     })
                     .SelectMany(ll2 => ll2, (l) => new { l.LegCode, l.LangCode }) // doesn't compile
                     .ToList();

我得到的错误信息如下:

  

错误1无法从用法推断出方法'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>,System.Func)'的类型参数。尝试显式指定类型参数。

我可以用以下内容替换非编译行,它会返回一个展平的立法代码列表,但我需要能够将这个立法代码与一种语言联系起来。

.SelectMany(ll2 => ll2.LegCode)

我做了一些研究,我发现的大多数示例似乎都在使用数据对象,这些对象在子父对象之间有映射,但这不是这种情况。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

我会嵌套构建您的匿名类型Select投影 SelectMany投影,以展平嵌套列表。

var result = 
    pContext.LanguageLegislations.AsEnumerable()
            .SelectMany(ll => ll.LegislationCode.Split('|').Select(legCode => new
            {
                LangCode = ll.LanguageCode,
                LegCode = legCode
            }))
            .ToList();