Linq除了两个IEnumerable查询

时间:2014-09-19 08:51:24

标签: c# asp.net linq fluent-nhibernate ienumerable

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

我的代码示例=>

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 =&gt; 我修改了我的代码如下,我的功能成功运作

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

1 个答案:

答案 0 :(得分:1)

更改以下行:

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

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

并使用results获取最终列表。

我宣布了一个新变量,因为我不知道你是否想要保持初始列表的完整性。如果您不介意更改它,您可以尝试:

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