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方法不会在智能感知中弹出。

Linq in 子句在哪里

这是因为您正在尝试从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 的方式,(存在比检查更好)