我正在尝试创建一个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)
我做了一些研究,我发现的大多数示例似乎都在使用数据对象,这些对象在子父对象之间有映射,但这不是这种情况。
任何帮助表示赞赏。
答案 0 :(得分:2)
我会嵌套构建您的匿名类型的Select
投影 SelectMany
投影,以展平嵌套列表。
var result =
pContext.LanguageLegislations.AsEnumerable()
.SelectMany(ll => ll.LegislationCode.Split('|').Select(legCode => new
{
LangCode = ll.LanguageCode,
LegCode = legCode
}))
.ToList();