我想传入一个方法三个参数。类名(表)、字段和关键字。
然后我想采取实体框架与反射表,并找到具有关键字的字段。
之类的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>
时,我再次得到错误
我认为这就是你想要结束的地方。您想要实体的字段名称?
ObjectContext类中有一个属性叫做MetadataWorkspace。你可以深入到一个EntitySet,它有一个属性叫做MetadataProperties。像这样。
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.
}
见链接
希望对你有帮助。
注:我也建议你接受更多的答案。你只有33%的接受率。这意味着你的问题最终会被忽略。记住,如果你在其他地方找到了答案,你可以回答自己的问题。: 0)