【问题标题】:Linq except two IEnumerable queriesLinq 除了两个 IEnumerable 查询
【发布时间】:2014-09-19 08:51:23
【问题描述】:

我有一个返回 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 => 我修复了如下代码,并且我的功能成功运行

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

【问题讨论】:

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


    【解决方案1】:

    更改以下行:

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

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

    并使用results 获取最终列表。

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

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

    【讨论】:

    • 我已经尝试过除了你上面写的功能,但是在我尝试了我的线路之后它也没有工作它没有工作。
    • 你有什么错误吗?请记住,我将结果放在 results 变量中,因此您需要在数据源中使用它。试试我编辑的代码。
    • 感谢您的帮助,我已经解决了我的问题,并在我的问题中添加了真实的代码。
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多