没有运行的LINQ不在“包含”查询中
对此坚持不懈。没有运行的LINQ不在“包含”查询中
简单的查询,但它只是不工作。 我只需要获取当前未分配给任何用户的公司单位。
ID是GUID类型。
调试时,我发现companyUnits中有2个对象,userCompanyUnits中有1个。 我试图让1 companyUnit(不存在userCompanyunit)显示。 相反,我没有得到任何结果。
任何想法查询有什么问题?也许我不能根据指导进行比较?
var companyUnitsList = from x in companyUnits
where !(from c in userCompanyUnits
select c.CompanyUnit.Id).Contains(x.Id)
select x;
在此先感谢!
这里是做不使用除了运营商,以及需要自定义的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
所有优秀的答案,但这是实际工作的人。谢谢! – Shenaniganz
既然你把它标记为SQL ,我假设这是可查询的并且针对数据库运行。根据ORM和是否已定义和可用的导航性能,你可以这样做:
var notAssigned =
from x in companyUnits
where x.Users.Any() == false
select x;
督察,无论导航属性或集合存在于公司单位联系到指定的用户(S)为您会用什么在查询中(并且很可能会转换为sql'exists')
有趣的方法,谢谢。但它不适用于我的具体情况。 – Shenaniganz
你总是可以查询那些有用户指定的然后全部执行的查询。除了(areAssigned) –
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();
不幸的是,该域的where子句中没有Contains方法方法可用 – Shenaniganz
您的语法看起来完全正确。你可以运行分析器来查看正在生成的SQL查询吗? –
请尝试使用Except运算符:http://stackoverflow.com/a/183812/138938 –
谢谢。我仍然不知道为什么我和Except方法不适合我,但我只是在知识库中添加了一个新的linq方法。感谢那。 – Shenaniganz