2012-04-18 50 views
2

我有此LINQLINQ到過濾器中包含的實體

var userGroups = this.ObjectContext.UserGroups.Include("Users"); 

的問題是,我必須篩選「用戶」,如果它是由場IsActive活性。

因此,我需要通過包括表「Users」的字段進行過濾,其中是IsActive

我怎麼用LINQ來做到這一點?

謝謝!

_ __ _ __ _ __ _ __ 附:

我嘗試做以下,但我不知道......

var userGroups = this.ObjectContext.UserGroups; 

foreach (var userGroup in userGroups) 
{ 
    var ussers = this.ObjectContext.Users.Where(f => f.UserGroupID == item.ID && f.IsActive == true).ToList<User>(); 

    userGroup.Users = users; 
} 
+0

澄清。您是否在尋找擁有活躍用戶的用戶組?或者你正在尋找基於特定用戶的用戶組?或者您是否在尋找所有用戶組中的活躍用戶? – villecoder 2012-04-18 18:35:06

+0

我需要獲取所有與所有關聯用戶相關的用戶組,但用戶應按字段IsActive過濾。 – 2012-04-18 18:37:07

回答

2

這是LINQ到實體?然後,不可能對包含渴望加載的實體進行任何類型的過濾。 Ladislav Mrnka在他最新的blog post中寫過。

當然,可以使用linq-to-objects來處理一旦載入內存的實體,但是如果你只想要一小部分效率低下的可用實體。

一個LINQ到對象的解決方案:

var userGroups = this.ObjectContext.UserGroups.Include("Users") 
.Select(ug => new UserGroup { 
Name = ug.Name, 
// Copy all fields 
Users = ug.Users.Where(u => u.Active) 
}); 
+0

所以我必須以某種方式玩FOREACH ...對嗎? – 2012-04-18 18:35:41

1

您可以扭轉的聲明是

var userGroups = this.ObjectContext.Users.Include("UserGroups").Where(f=>f.IsActive == true); 

,然後在用戶組字段中使用的GroupBy?

+0

否...在這種情況下,我將用戶作爲頂級實體。我不需要它。它應該是UserGroups。 – 2012-04-18 18:38:59