与lambda表达的反思

时间:2011-11-17 14:25:48

标签: reflection entity-framework-4 lambda

我想传递一个方法三个参数。 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>时,我再次收到错误。

1 个答案:

答案 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)