2

我有这个LINQ

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

问题是,如果字段IsActive处于活动状态,我必须过滤“用户” 。

因此,我需要按IsActive所在的包含表“ Users ”的字段进行过滤。

我怎么能用 LINQ 做到这一点?

谢谢!

_ __ _ __ _ __ _ __ PS

我尝试执行以下操作,但我不确定...

 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;
 }
4

2 回答 2

2

这是 linq-to-entities 吗?那么就不可能对预先加载的包含实体进行任何类型的过滤。Ladislav Mrnka 在他最新的博文中写到了它。

当然可以使用 linq-to-objects 来处理加载到内存中的实体,但是如果您只想要一部分可用实体,那将是低效的。

一个 linq-to-objects 解决方案:

var userGroups = this.ObjectContext.UserGroups.Include("Users")
.Select(ug => new UserGroup {
Name = ug.Name,
// Copy all fields
Users = ug.Users.Where(u => u.Active)
});
于 2012-04-18T18:34:33.847 回答
1

你能把这句话倒过来

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

然后在 UserGroups 字段上使用 GroupBy?

于 2012-04-18T18:36:26.713 回答