2016-06-26 29 views
-2

的dbset我有,應該在差集運行的查詢,如何更改dbset查詢每種類型如何動態改變的EntityFramework

我嘗試:

using (TestContext rpContext = new TestContext(connectionString)) 
     { 
      IEnumerable<TargetType> query = null; 
      dynamic TargetSet = null; 

      switch (basicDefinitionType) 
      { 
       case MyEnumType.MySet: 
        TargetSet = Convert.ChangeType(TargetSet, typeof(DbSet<MySet>)); 
        TargetSet = rpContext.MySet; 
        break; 
       default: 
        throw new Exception("can not detect type"); 
      } 

      var q = from r in TargetSet 
        where (nodeId == null ? r.ParentId == null : r.ParentId == nodeId) 
        orderby r.Code 
        select r; 
      query = (IEnumerable<TargetType>)q.ToFullyLoaded(); 

      return query; 
     } 
    } 
+0

爲什麼不使用'context.Set ()'它會返回每個類型的DbSet,你可能也想看看:http://stackoverflow.com/questions/13376975/getting-dbsetmytable-from-a-字符串 – csharpfolk

+0

tnx,夥計,我讀你的鏈接 – data

回答

0

你可以使用作爲csharpfolk提到的DbSet,但這可能是repository pattern可能使您的代碼更具可讀性和可維護性的情況。在內部,存儲庫模式應該使用DbSet,但是從使用它的代碼中抽象出來。

+0

嗯,我想我應該做一個通用函數來獲取存儲庫,現在我只寫了一個泛型函數'GetChildrenBaseQuery ',它使用'rpContext.Set ()'我在我的例子中使用它'查詢= GetChildrenBaseQuery (rpContext,nodeId);'但我想一些人想我的失敗嘗試。因爲我有一個函數和相同的查詢27個表 – data

+0

我的代碼運作良好,但它只是一個問題和一個新的嘗試 – data