带有lambda表达式的反射



我想传入一个方法三个参数。类名(表)、字段和关键字。

然后我想采取实体框架与反射表,并找到具有关键字的字段。

之类的
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)

相关内容

  • 没有找到相关文章

最新更新