2014-09-19 40 views
0

我有一个返回IEnumarable类型的两个linq查询。第一个查询返回过滤的值,第二个查询返回除第二个查询之外的所有值,以便在SQL中首先查询类似于minus操作符的数据,并绑定到我的列表框。Linq除了两个IEnumarable查询

我的代码示例=>

using (ISession session = SessionManager.CurrentSession) 
     { 
      IEnumerable<RoleDefinition> roleAssigned = from groupRole in session.Query<GroupRole>() 
       join roleDef in session.Query<RoleDefinition>() on groupRole.RoleDefinitionId equals 
        roleDef.RoleDefinitionId 
       where groupRole.GroupId == SelectedGroupId 
       orderby roleDef.RoleName 
       select new RoleDefinition 
       { 
        RoleName = roleDef.RoleName 
       }; 

      IEnumerable<RoleDefinition> roleUnassigned = from grole in session.Query<RoleDefinition>() 
       orderby grole.RoleName 
       select new RoleDefinition 
       { 
        RoleName = grole.RoleName 
       }; 

      List<RoleDefinition> lRoleAss = roleAssigned.ToList(); 
      List<RoleDefinition> lRoleUnAss = roleUnassigned.ToList(); 
      lRoleUnAss = lRoleUnAss.Where(x => !lRoleAss.Contains(x)).ToList(); 

      lsbAssigned.DataSource = lRoleAss; 
      lsbAssigned.TextField = "RoleName"; 
      lsbAssigned.ValueField = "RoleName"; 
      lsbAssigned.DataBind(); 

      lsbUnAssigned.DataSource = lRoleUnAss; 
      lsbUnAssigned.TextField = "RoleName"; 
      lsbUnAssigned.ValueField = "RoleName"; 
      lsbUnAssigned.DataBind(); 
     } 

EDIT =>我固定为下面我的代码和我的函数成功工作

 List<RoleDefiniton> filteredUnassign = lRoleUnAss.Where(def => !lRoleAss.Select(x => x.RoleName).Contains(def.RoleName)).ToList(); 

回答

1

更改以下行:

lRoleUnAss = lRoleUnAss.Where(x => !lRoleAss.Contains(x)).ToList(); 

var results = lRoleUnAss.Except(lRoleAss).ToList(); 

并使用results获得最终列表。

我宣布了一个新的变量,因为我不知道是否要保持最初的列表完好无损。如果你不介意改变它,你可以尝试:

lRoleUnAss = lRoleUnAss.Except(lRoleAss).ToList(); 
+0

Previusly我试过除()函数,但它没有工作 – Eren 2014-09-19 09:13:13

+0

是否现在的工作?你究竟试过了什么? – 2014-09-19 09:21:55

+0

我试过除了你上面写的功能,但它没有工作后,我已经尝试了我的线也没有工作。 – Eren 2014-09-19 09:27:15