我想传递一个方法三个参数。 Classname(表),字段和关键字。
然后我想带着反映表的Entity Framework,找到有关键字的字段。
像
这样的东西public List<object> FilterOptions(string keyword, string className, string field)
{
var objectSet = (System.Data.Objects.ObjectSet<dynamic>)DataContext.GetType().GetProperty(className).GetValue(DataContext, null);
var options = objectSet.Where(x => x.GetType().GetProperty(field).GetValue(x, null) == keyword).ToList();
...
}
但是我得到“表达式树可能不包含动态操作”
当我将<dynamic>
更改为<object>
时,我再次收到错误。
答案 0 :(得分:0)
我认为这是你想要结束的地方。您想要实体的字段名称吗?
ObjectContext类上有一个名为MetadataWorkspace的属性。您可以深入查看具有属性调用MetadataProperties的EntitySet。这样的事情。
public List<object> FilterOptions(string keyword, string className, string field)
{
return ObjectContext.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace).BaseEntitySets.Where(es => es.MetadataProperties.Any(mp => mp.Name == keywork));
// This has not been tested but should get you on the right path.
}
请参阅此link。
希望这有帮助。
P.S。我还建议你接受更多答案。您只有33%的接受率。这意味着你的问题最终会被通过。请记住,如果您在其他地方找到答案,您可以回答自己的问题。 :0)