我想知道如何在Linq中使用IN
子句。这是我的代码: -
int empCount = ctx.tblEmpTran
.Count(
e => e.Id == Id &&
e.Month == selectedMonth &&
e.Year == selectedYear &&
e.employeeId.contains()
);
以下查询应该在IN
SELECT A.Id FROM dbo.EmployeeDetail A WHERE A.CompanyId = 1 AND A.COLS > 0
在上面的代码中,contains
方法不会在intellisense中弹出。
答案 0 :(得分:2)
这是因为你试图从SQL转换为Linq,你不能尝试更差的方法。
您应该尝试从您需要的操作开始编写LINQ查询,完全忘记SQL。
在Linq中没有“IN”操作符,以实现与收集相同的内容并检查它是否为Contains
值。
因此,在您的方案中,您应该只生成有效值的集合,然后在查询中执行:
myCollection.Contains(e.employeeId)
它是“集合CONTAINS值”的逻辑,而不是“在集合中找到值”。再次,如果你坚持在使用Linq时从SQL开始,你将永远遇到这种问题。
在how to approach Linq correctly上查看Albahari教程,您的工作效率将会飙升。
答案 1 :(得分:0)
您应该创建一个要检查的员工ID集合,代码将是
employees.contains(e.employeeId)
答案 2 :(得分:0)
而不是这个e.employeeId.contains()
,你应该使用它:
listOfIds.Contains(e.employeeId)
其中listOfIds
将是int List<int>
的列表,并且将包含您在IN(...)
之后放在括号之间的ID。
答案 3 :(得分:0)
考虑到你在同一个DbSet中有一个tblEmployeeDetail并且他们通过employeeId有关系,你可以给你写一个查询。
var q = from e in ctx.tblEmployeeDetail where e.Transactions.Any(t => t.Month == selectedMonth &&
t.Year == selectedYear);
int empCount = q.Count();
这是伪代码,但这就是你如何有效地使用LINQ,(存在优于In check)