无法正常工作 LINQ 不在“包含”查询中

本文关键字:不在 包含 查询 LINQ 常工作 工作 | 更新日期: 2023-09-27 18:33:45

为此发疯。

简单的查询,但它只是不起作用。我只需要获取当前未分配给任何用户的公司单位。

ID 是 GUID 类型。

调试时,我看到公司单位中有 2 个对象,用户单位中有 1 个对象。我正在尝试显示 1 个公司单位(用户公司单位中不存在)。相反,我没有得到任何结果。

知道查询有什么问题吗?也许我不能根据指导进行比较?

var companyUnitsList = from x in companyUnits
                       where !(from c in userCompanyUnits
                               select c.CompanyUnit.Id).Contains(x.Id)
                        select x;

提前感谢!

无法正常工作 LINQ 不在“包含”查询中

这是一种不使用 except 运算符的方法,并且需要自定义 IEqualityComparer:

        List<Tuple<int, string>> allUnits = new List<Tuple<int, string>>();
        allUnits.Add(new Tuple<int, string>(1, "unit1"));
        allUnits.Add(new Tuple<int, string>(2, "unit2"));
        allUnits.Add(new Tuple<int, string>(3, "unit3"));
        List<Tuple<int, string>> assignedUnits = new List<Tuple<int, string>>();
        assignedUnits.Add(new Tuple<int, string>(2, "unit2"));
        var unassigned = allUnits.Where(m => !assignedUnits.Any(asgn => asgn.Item1 == m.Item1));
//Yields unit1 and unit3
  • 第 1 项对应于 Unit.ID

由于您将其标记为sql,因此我假设这是可查询的并且针对数据库运行。 根据 ORM 以及您是否定义了导航属性并可用,您可以执行以下操作:

var notAssigned =
    from x in companyUnits
    where x.Users.Any() == false
    select x;

IOW,任何用于将公司单位绑定到分配用户的导航属性或集合都是您将在查询中使用的(并且很可能会转换为 sql"存在")

    var list1 = from s in new String[] {"ABC1","ABC2", "ABC3", "ABC4"} select new {Field1=s,Id = Guid.NewGuid().ToString()}  ;
    var list2 = new String[] {"ABC3","ABC4", "ABC5", "ABC6"} ;

    var requiredList = (from i1 in list1
                    from i2 in list2 
                    where !i1.Field1.Contains(i2)
                    select i1).Distinct();