我有一个名为Foo的表,我有两列:Lorem和Ipsum,所以表的方案是:
Foo(Lorem, IpsumID)
我还有一个名为IpsumTypes的表,它看起来像这样:
IpsumTypes(IpsumID, IpsumName)
我想编写一个 LINQ 查询,它将产生以下结果:
Headers: Lorem, IpsumName1, IpsumName2, ..., IpsumNamen值: Loremi, count(IpsumName1), ..., count(IpsumNamen)
每行表示一组 Lorem 值和组中每个可能的 IpsumID 的数量。可以将新行添加到 IpsumType 表中,也可以删除行,因此我需要动态生成的列,因为在编写代码时,我不知道 Ipsum 的可能值。我怎样才能做到这一点?是否有一个神奇的 Linq 查询可以解决此问题,或者如果速度很重要,我应该从数据库中获取值并单独解析它们?
提前感谢您的回复。
此查询从数据库中获取所需的值。 从那里,您可以投影到 xml 或程序可以理解的其他动态形状中。
from foo in Foo
let name = foo.IpsumType.IpsumName
group foo by new
{
Lorem = foo.Lorem,
Name = name
} into g
select new
{
Lorem = g.Key.Lorem,
Name = g.Key.Name,
Count = g.Count()
};
我认为您正在寻找 PIVOT SQL 语句。但是没有 LINQ 等效项,因此您应该改用 SQL 并自行分析返回的数据。