C# Where中的Linq IN子句
我想知道如何在Linq中的子句中使用C# Where中的Linq IN子句,c#,linq,C#,Linq,我想知道如何在Linq中的子句中使用。这是我的密码:- int empCount = ctx.tblEmpTran .Count( e => e.Id == Id && e.Month == selectedMonth && e.Year == selectedYear &&
。这是我的密码:-
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中弹出。您应该创建一个要检查的员工ID集合,代码将是
employees.contains(e.employeeId)
您应该使用以下内容代替此e.employeeId.contains()
:
listOfIds.Contains(e.employeeId)
其中,listOfIds
将是一个int的列表,list
将包含您将放置在(…)
中后面括号之间的ID,这是因为您正在尝试从SQL转换为Linq,并且您无法尝试更糟糕的方法
您应该试着从您需要的开始编写LINQ查询,完全忘记SQL
在Linq中没有“In”操作符,要实现同样的效果,您需要获取集合并检查它是否包含值
因此,在您的场景中,您只需生成有效值的集合,然后在查询中执行以下操作:
myCollection.Contains(e.employeeId)
它是“集合包含值”逻辑,而不是“在集合中找到值”。同样,如果您在使用Linq时坚持从SQL开始,您将始终遇到此类问题
查看Albahari教程,您的工作效率将突飞猛进。考虑到您在同一数据库集中有一个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的方式(Exists优于check)它被称为“Any”。实际上,Any for exists and contains for In.where是employeeDetail数据库集,您是否设置了两个模型之间的关系。@Anup如果按照一般约定,e.employeeId是数字(int/long),则intellisense不显示contains()方法。Contains()方法可用于字符串/集合类型。