简短的故事:我想将列表/字典转换为匿名对象
基本上我以前拥有的是:
var model = from item in IEnumerable<Item>
select new
{
name = item.Name
value = item.Value
}
等。
如果我在列表或字典中有name, item.Name
,我该如何创建相同的匿名对象model
?
编辑:澄清:
如果字典包含[name, item.Name]
和[value, item.Value]
作为键值对,那么如果不假设您既不知道model
也不知道name
,我将如何创建value
?
答案 0 :(得分:5)
由于List<T>
实现IEnumerable<T>
,您现有的代码应该以完全相同的方式工作:
var model = from item in yourList
select new { name = item.Name };
对于Dictionary<TKey,TValue>
,你可以这样做:
var model = from item in yourDictionary
select new {
name = item.Key
value = item.Value
};
这是有效的,因为Dictionary<TKey,TValue>
实现IEnumerable<KeyValuePair<TKey,TValue>>
所以在第二个表达式item
中将输入KeyValuePair<TKey,TValue>
,这意味着您可以使用item.Key
投影新类型和item.Value
。
答案 1 :(得分:0)
听起来你只想从字典中获取值?如果是这样,MyDictionary。Values应该为你做到这一点。
答案 2 :(得分:0)
如果你想在其他地方构建另一个匿名对象,它与你从IEnumerable<Item>
生成的对象类型兼容,你可以通过确保你构造的匿名类型具有:
如果你这样做,他们将映射到相同的单一生成类型。
现在,为什么你想要这样做是超出我的,所以我很确定我不明白你的问题。您应该发布有关您想要做的事情的更多信息。
无论如何,这里是生成一个与IEnumerable中的类型兼容的匿名对象的代码:
var x = new
{
name = dict["name"],
value = dict["value"]
};
由于这符合上述所有规则,因此它与您从Linq查询生成的对象的类型相同。