简体   繁体   English

C#词典透视Linq

[英]C# Dictionary Pivoting Linq

I've a Dictionary like this: 我有这样的字典:

Key | Value
C1  | 1
C2  | 2
C3  | 3

Now I need some linq statement or lambda expression (or other mechanism) to return new object like this: 现在,我需要一些linq语句或lambda表达式(或其他机制)以返回新对象,如下所示:

new { C1 = 1, C2 = 2, C3 = 3}.

The problem is that the keys' values are known only at runtime, as I know only at runtime how many properies my new anonimous object has and their names. 问题在于密钥的值仅在运行时才知道,因为我仅在运行时才知道我的新匿名对象有多少个属性及其名称。

Can anyone suggest me how reach my goal? 谁能建议我达到目标?

You can use a combination of an ExpandoObject and dynamic . 您可以结合使用ExpandoObjectdynamic

var data = new Dictionary<string, int> {
    { "C1", 1},
    { "C2", 2},
    { "C3", 3}
};
var expandoObject = new ExpandoObject() as IDictionary<string, Object>;
foreach (var kvp in data) {
    expandoObject.Add(kvp.Key, kvp.Value);
}
dynamic pivotedData = expandoObject;

Console.WriteLine(pivotedData.C1);
Console.WriteLine(pivotedData.C2);
Console.WriteLine(pivotedData.C3);
Console.ReadLine();

This will yield: 这将产生:

1
2
3

You can probably make a nice extension method out of it. 您可能可以用它做一个不错的扩展方法。

这是不可能的。如果在编译时不知道结果对象的属性,就不能使用它,而不必跳过反射箍(使用字典会更容易)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM