Linq in 子句在哪里
本文关键字:在哪里 子句 in Linq | 更新日期: 2023-09-27 18:37:25
我想知道如何在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
方法不会在智能感知中弹出。
这是因为您正在尝试从SQL转换为Linq,并且无法尝试更糟糕的方法。
您应该尝试从需要它执行的操作开始编写 LINQ 查询,而完全忘记 SQL。
在 Linq 中没有"IN"运算符,要实现相同的目的,您需要获取集合并检查它是否Contains
值。
因此,在您的方案中,您应该简单地生成有效值的集合,然后在查询中执行以下操作:
myCollection.Contains(e.employeeId)
它是"集合包含值"的逻辑,而不是"在集合中找到值"。同样,如果您在使用 Linq 时坚持从 SQL 开始,您将始终会遇到此类问题。
查看 Albahari 教程,了解如何正确处理 Linq,您的工作效率将飙升。
您应该创建一个要检查的员工 ID 集合,代码将是
employees.contains(e.employeeId)
而不是这个e.employeeId.contains()
,你应该使用这个:
listOfIds.Contains(e.employeeId)
其中listOfIds
将是 int、List<int>
的列表,并将包含您将放置在 IN(...)
之后的括号之间的 ID。
考虑到您在同一个 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 的方式,(存在比检查更好)