2011-11-17 104 views
0

我想在一個方法中傳遞三個參數。 Classname(表格),字段和關鍵字。用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>我再次得到一個錯誤。

回答

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)