2012-08-14 61 views
2

我不知道應該放什麼標題,當然編輯,英文不是我的母語。選擇所有擁有活動項目的類別?

我已經掛有Items,並在其中Categories LINQ2SQL數據庫。 Items表有字段IsActive

如何選擇所有具有IsActive設置爲true的項目的類別?我可以非常容易地選擇所有項目var items = _db.Items.Where(x => x.IsActive == true);,但我可以以某種方式選擇與我剛選擇的這些項目相關的所有類別?

我的LINQ的知識是非常有限的,所以我不知道如何做到這一點。

+0

你正在尋找一個[連接](http://www.dotnetperls.com/join)。 – Adam 2012-08-14 14:47:22

回答

1

嘗試類似如下

用於活性的任何項目

var items = _db.Cateogry.Where(x => x.Items.Any(y=>y.IsActive == true)); 
+0

這隻會給每個項目活躍的類別。 – 2012-08-14 14:52:05

+0

這對我有幫助,我嘗試了'全部',但它沒有工作,但是'任何'都很好。 – sed 2012-08-14 14:57:47

+0

@Qmal - 不過,我覺得,你需要檢查所有反正我更新我的回答與任何還.. – 2012-08-14 15:01:28

0

假設適當的關聯屬性存在,你可以這樣做:

var activeCategories = from category in _db.Categories 
         where category.Items.Any(item => item.IsActive) 
         select category; 

如果你必須做一個連接,你可以試試:

var activeCategories = from category in _db.Categories 
         join item in _db.Items on category.Id equals item.CategoryId 
                into categoryGroup 
         where categoryGroup.Any(i => i.IsActive) 
         select category; 

(或)

var activeCategories = from category in _db.Categories 
         join item in _db.Items.Where(i => i.IsActive) 
           on category.Id equals item.CategoryId 
           into categoryGroup 
         where categoryGroup.Any() 
         select category; 

(或)

var activeCategories = from category in _db.Categories 
         where _db.Items 
           .Where(i => i.IsActive) 
           .Select(i => i.CategoryId) 
           .Contains(category.Id) 
         select category; 
0

假設每個項目活性

var items = _db.Cateogry.Where(x => x.Items.All(y=>y.IsActive == true)); 

每個項目都有一個類別ID或類似,則:

from c in db.Categories 
    where db.Items.Any(it => it.CategoryID == c.ID && it.IsActive) 
    select c; 

值得注意:

(from c in db.Categories join it in db.Items 
    on c.ID equals it.CategoryID 
    select c).Distinct(); 

這是在這種情況下,有些不必要的,但也有在這後面,讓你比你更可以與前者做常見的變異。