LINQ中的动态新字段

时间:2012-03-30 08:57:22

标签: c# linq entity-framework linq-to-entities

是否可以创建new {variable = x.something}并动态指定变量名称?例如:

var name = "dynamicName"; 
var result = context.select(x=> new {name.ToString() = x.something })

通过这种方式,我们将得到一个列表,其中属性名称为dynamicName。 这有可能吗?

3 个答案:

答案 0 :(得分:5)

对于匿名类型,这是不可能的,因为匿名类型不是动态的。它们必须在编译时完全定义。但是,您可以使用动态对象,例如ExpandoObject

var name = "dynamicName"; 
var result = context.Select(x =>
                            {
                                var exp = new ExpandoObject() as IDictionary<string, object>;
                                exp[name] = x.something;
                                return (dynamic)exp;
                            });

答案 1 :(得分:1)

使用

    Dictionary<string,string> myDic 

然后

    myDic.Add(name.ToString(), x.something)

答案 2 :(得分:1)

您可以使用Reflection.Emit在运行时创建匿名类型,但这并不容易(http://www.codeproject.com/Articles/13337/Introduction-to-Creating-Dynamic-Types-with-Reflec)。通常情况下,对我们来说,dictonary,array或dynamic

更好