C# Linq除了两个IEnumerable查询

C# Linq除了两个IEnumerable查询,c#,asp.net,linq,fluent-nhibernate,ienumerable,C#,Asp.net,Linq,Fluent Nhibernate,Ienumerable,我有一个返回IEnumerable类型的双linq查询。第一个查询返回过滤后的值,第二个查询返回我想要的所有值,除了从第二个查询到第一个查询的值,如SQL中的减号运算符,并绑定到我的listboxs 我的代码示例=> using (ISession session = SessionManager.CurrentSession) { IEnumerable<RoleDefinition> roleAssigned = from groupRol

我有一个返回IEnumerable类型的双linq查询。第一个查询返回过滤后的值,第二个查询返回我想要的所有值,除了从第二个查询到第一个查询的值,如SQL中的减号运算符,并绑定到我的listboxs

我的代码示例=>

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();
        }
使用(ISession session=SessionManager.CurrentSession)
{
IEnumerable roleAssigned=来自会话中的groupRole.Query()中
在groupRole.RoleDefinitionId等于上的session.Query()中加入roleDef
roleDef.RoleDefinitionId
其中groupRole.GroupId==SelectedGroupId
订购人roleDef.RoleName
选择新角色定义
{
RoleName=roleDef.RoleName
};
IEnumerable roleUnassigned=来自会话中的grole.Query()
格罗尔·罗莱曼订单
选择新角色定义
{
RoleName=grole.RoleName
};
List lRoleAss=roleasigned.ToList();
List lRoleUnAss=roleunasigned.ToList();
lRoleUnAss=lRoleUnAss.Where(x=>!lRoleUnAss.Contains(x)).ToList();
lsbAssigned.DataSource=lRoleAss;
lsbAssigned.TextField=“RoleName”;
lsbAssigned.ValueField=“RoleName”;
lsbAssigned.DataBind();
lsbunsigned.DataSource=lroleunas;
lsbunsigned.TextField=“RoleName”;
lsbunsigned.ValueField=“RoleName”;
lsbunsassigned.DataBind();
}
EDIT=>我修复了如下代码,我的函数成功运行

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

更改以下行:

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

并使用
结果
获取最终列表

我声明了一个新变量,因为我不知道是否要保持初始列表不变。如果您不介意更改,您可以尝试:

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

我试过除你上面写的函数之外的其他函数,但在我试过我的行之后它就不起作用了。你有什么错误吗?请记住,我将结果放在
results
变量中,因此您需要在数据源中使用它。请尝试我编辑的代码。谢谢您的帮助。我已经解决了我的问题,并且为我的问题添加了真实的代码。
lRoleUnAss = lRoleUnAss.Except(lRoleAss).ToList();