Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不工作LINQ不在“中”;包括「;查询_C#_Sql_Linq - Fatal编程技术网

C# 不工作LINQ不在“中”;包括「;查询

C# 不工作LINQ不在“中”;包括「;查询,c#,sql,linq,C#,Sql,Linq,为这件事发疯 简单的查询,但它只是不工作。 我只需要获取当前未分配给任何用户的公司单位 ID是GUID类型 调试时,我看到companyUnits中有2个对象,userCompanyUnits中有1个对象。 我试图让1 companyUnit(在userCompanyunit中不存在)显示出来。 相反,我没有得到任何结果 你知道这个问题出了什么问题吗?也许我不能基于guid进行比较 var companyUnitsList = from x in companyUnits

为这件事发疯

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

ID是GUID类型

调试时,我看到companyUnits中有2个对象,userCompanyUnits中有1个对象。 我试图让1 companyUnit(在userCompanyunit中不存在)显示出来。 相反,我没有得到任何结果

你知道这个问题出了什么问题吗?也许我不能基于guid进行比较

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

提前谢谢

以下是一种无需使用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
List allUnits=new List();
添加(新元组(1,“unit1”);
添加(新元组(2,“unit2”);
添加(新元组(3,“unit3”);
List assignedUnits=新列表();
添加(新元组(2,“unit2”);
var unassigned=allUnits.Where(m=>!assignedUnits.Any(asgn=>asgn.Item1==m.Item1));
//产生单位1和单位3
  • Item1对应于Unit.ID

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

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

注意,无论存在什么导航属性或集合来将公司单位与分配的用户联系起来,您都将在查询中使用它(并且很可能转换为sql“exists”)

您的语法看起来完全正确。能否运行探查器查看正在生成的sql查询?请尝试改用Except运算符:谢谢。我仍然不知道为什么我的和Except方法对我不起作用,但我只是在我的知识库中添加了一个新的linq方法。谢谢。你确定你的收藏有共同的元素吗?是的,下面的解决方案适合我。谢谢您的时间。字段上的where子句中没有可用的Contains方法。非常有趣的方法,谢谢。但是,它不适用于我的特定场景。您始终可以查询已分配用户的用户,然后执行所有操作。除了(AreaAssigned)所有伟大的答案,但这是一个真正有效的答案。非常感谢。
    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();