Linq IN Clause in Where

时间:2015-01-14 13:26:49

标签: c# linq

我想知道如何在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中弹出。

4 个答案:

答案 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)