2010-02-16 311 views
1

我想弄清楚如何根據以下情況查詢我的實體。實體框架查詢

我有兩個表,LKCATEGORY和LKSUBCATEGORY,你可以想象這兩個表是相互關聯的。然而,當我來到一個頁面,只需要顯示活動的類別和子類別,我該如何做,並拉回LKSUBCATEGORY的LKSUBCATEGORY列表中包含的這兩個過濾器就位(兩個實體上的isActive = true) 。

我,拉背式LKCATEGORY列表庫調用如下:

 //Create the Entity object 
     List<LKCATEGORY> category = null; 

      using (SOAE strikeOffContext = new SOAE()) 
      { 
       //Invoke the query 
       category = AdminDelegates.selectCategory.Invoke(strikeOffContext).ByActive(true).ToList(); 
      } 

雖然代表(選擇分類)看起來像:

 public static Func<SOAE, IQueryable<LKCATEGORY>> selectCategory = 
    CompiledQuery.Compile<SOAE, IQueryable<LKCATEGORY>>(
    (category) => from c in category.LKCATEGORY.Include("LKSUBCATEGORY") 
       select c); 

,最後篩選(ByActive)

public static IQueryable<LKCATEGORY> ByActive(this IQueryable<LKCATEGORY> qry, bool active) 
    { 
     //Return the filtered IQueryable object 
     return from c in qry 
       where c.ACTIVE == active 
       select c; 

    } 

我意識到我只有LKCATEGORY實體上的過濾器,當然我只會過濾該表。我的問題是如何過濾LKCATEGORY和LKSUBCATEGORY,並將包含LKSUBCATEGORY並過濾的LKCATEGORY類型的LIST拉回來?

由於提前, 比利

回答

1

這可能不是你的解決方案,但你可以把這個分成兩個查詢,試試這個(我認爲這是在上下文中LKCATEGORY第一操作):

var categories = context.LKCATEGORY.Where(c => c.ACTIVE).ToList(); 
var subcategories = context.LKSUBCATEGORY.Where(c => c.ACTIVE).ToList(); 
return categories; 

現在看看categories.LKSUBCATEGORY列表,你會看到你只有活動的。 其他解決方案涉及使用linq join而不是Include

編輯

替代方式:

context.LKCATEGORY.Where(c => c.ACTIVE).Select(c => new { Category = c, Subcategory = c.LKSUBCATEGORY.Where(sc => sc.ACTIVE) }).ToList().Select(a => a.Category); 
+0

工作就像一個魅力。我知道另一種方式來將兩者分開查詢,但我更喜歡這個。謝謝。如果您有時間,請發佈您的linq連接示例。再次感謝! 比利 –