Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Where中的Linq IN子句_C#_Linq - Fatal编程技术网

C# Where中的Linq IN子句

C# Where中的Linq IN子句,c#,linq,C#,Linq,我想知道如何在Linq中的子句中使用。这是我的密码:- int empCount = ctx.tblEmpTran .Count( e => e.Id == Id && e.Month == selectedMonth && e.Year == selectedYear &&

我想知道如何在Linq中的子句中使用
。这是我的密码:-

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()方法可用于字符串/集合类型。