2012-04-18 47 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