C# LINQ中的动态新领域
这是否可以创建C# LINQ中的动态新领域,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,这是否可以创建新的{variable=x.something}并动态指定变量名?例如: var name = "dynamicName"; var result = context.select(x=> new {name.ToString() = x.something }) 这样,我们将有一个属性名为dynamicName的列表。 那么这在某种程度上是可能的吗?对于匿名类型,这是不可能的,因为匿名类型不是动态的。它们必须在编译时完全定义。但是,您可以使用动态对象,如ExpandoO
新的{variable=x.something}
并动态指定变量名?例如:
var name = "dynamicName";
var result = context.select(x=> new {name.ToString() = x.something })
这样,我们将有一个属性名为dynamicName的列表。
那么这在某种程度上是可能的吗?对于匿名类型,这是不可能的,因为匿名类型不是动态的。它们必须在编译时完全定义。但是,您可以使用动态对象,如
ExpandoObject
:
var name = "dynamicName";
var result = context.Select(x =>
{
var exp = new ExpandoObject() as IDictionary<string, object>;
exp[name] = x.something;
return (dynamic)exp;
});
var name=“dynamicName”;
var result=context.Select(x=>
{
var exp=作为IDictionary的新ExpandooObject();
exp[name]=x.something;
返回(动态)exp;
});
使用
Dictionary<string,string> myDic
您可以在运行时使用Reflection.Emit创建匿名类型,但这并不容易(http://www.codeproject.com/Articles/13337/Introduction-to-Creating-Dynamic-Types-with-Reflec). 通常情况下,最好只使用命令式、数组或动态您可以使用
NameValueCollection
而不是匿名类型。你为什么需要这样的东西?@Daniel就是一个创建列名的例子dynamically@ADrian实体框架+1,但我建议使用字典
。原因很简单,x.something
不一定是string.interest方法,我只是想知道您现在如何能够以合理的方式使用result
,因为从技术上讲,它可以是任何东西的集合。只是一些值得思考的东西……“一个带有语句体的lambda表达式不能转换为表达式树”@kosnkov,事实上,这将与Linq to对象一起工作,但我不认为有一种方法可以通过实体框架实现这一点
myDic.Add(name.ToString(), x.something)