坚持这个。
简单查询但它只是不起作用。 我只需要获得当前未分配给任何用户的公司单位。
ID是GUID类型。
调试时,我看到companyUnits中有2个对象,userCompanyUnits中有1个。 我想要显示那个1 companyUnit(userCompanyunit中不存在)。 相反,我没有得到任何结果。
知道查询有什么问题吗?也许我无法根据guids进行比较?
var companyUnitsList = from x in companyUnits
where !(from c in userCompanyUnits
select c.CompanyUnit.Id).Contains(x.Id)
select x;
提前致谢!
答案 0 :(得分:1)
这是一种不使用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 :(得分:1)
由于你将它标记为sql,我假设这是可查询的并且针对数据库运行。根据ORM以及是否定义和使用导航属性,您可以执行以下操作:
var notAssigned =
from x in companyUnits
where x.Users.Any() == false
select x;
IOW,无论存在哪种导航属性或集合将公司单元与指定的用户联系起来,您将在查询中使用(并且最有可能转换为sql'存在')
答案 2 :(得分:1)
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();