2015-05-12 68 views
0

我的問題是如何讓一個函數可以將字符串轉換爲類並執行linq查詢。 這是它應該是如何工作的一個簡單的例子:如何將字符串轉換爲ClassName並執行Linq查詢

// DBContext 
DataView _db = new DataView(); 

public static void ...(){ 
     Create("somedesc", "someabbr", "vwFunctieScheidingMetacom", "someiconstring"); 
} 
// the function 
public static void Create(string description, string abbrevition, string cn, string icon) 
{ 
     // cn is classname 
     // convert cn into a class 
     var class = Convert.Class(cn); 
     // Execute Linq query 
     _db.class.ToList<dynamic>(); 
} 

這是我的DbContext:

public partial class DataView : DbContext 
{ 
    public DataView() 
     : base("name=DataView") 
    { 
    } 

    public virtual DbSet<vwFunctieScheidingMetacom> vwFunctieScheidingMetacom { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
    } 
} 

現在只有一個模型加載,但在未來會有更多。這些模型都會有所不同,我希望儘可能動態化。

我試圖使用反射,但它沒有工作,我不知道從哪裏開始。 任何幫助,將不勝感激。

更新

這是一個需要動態地使用類的一個:

namespace Portal.ModelViews 
{ 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity.Spatial; 

[Table("vwFunctieScheidingMetacom")] 
public partial class vwFunctieScheidingMetacom 
{ 
    public int? PermissiesID1 { get; set; } 

    public int? PermissiesID2 { get; set; } 

    [StringLength(255)] 
    public string PermName1 { get; set; } 

    [StringLength(255)] 
    public string PermName2 { get; set; } 

    public string Omschrijving { get; set; } 

    public int? Prioriteit { get; set; } 

    [StringLength(50)] 
    public string Login { get; set; } 

    [Key] 
    [Column(Order = 0)] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int FunctieScheidingID { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    [StringLength(60)] 
    [DisplayName("ID")] 
    public string ID { get; set; } 
} 

}

+0

應用程序應該如何創建一個類的屬性,方法等字符串?我知道一些方法,您可以使用這些方法創建一個已經從anonymus類型指定的類的對象的實例(如果anonymus類型的屬性和指定的類的屬性相對應),但是會從字符串中創建一個類本身?這是我很樂意看到解釋;) –

+0

你想要的字符串是現有類的名稱來獲取?可能需要ExecuteQuery http://stackoverflow.com/questions/11472059/dynamic-table-name-in-entity-framework-linq或反射https://social.msdn.microsoft.com/Forums/en-US/d54815dc- 4233-4697-9859-17356eb92f36/could-i-access-object-through-object-namestring-in-ef?forum = adonetefx#dbe631df-8836-40bd-bac8-894389249381 –

+0

@SteveGreene是的,但我要在不同情況下使用它,而不僅僅是查詢。我該如何利用這個問題的思考? – Jim

回答

0

因爲你似乎不喜歡的答案到目前爲止,我會解釋你的問題不同。在字典中引用您的類。

假設你的代碼定義一個類Foo ...

var clash = new Dictionary< string, Type>(); 
clash["Foo"] = Foo.GetType(); 

填充你的字符串和類型此哈希表來他們解決。

+0

接下來我的問題是...如何使用它從數據庫中獲得結果..我知道這並不工作_db.clash [「Foo」]。ToList ()。任何想法我需要這樣做? – Jim