2015-01-14 2 views
-1

Linq에서 IN 절을 사용하는 방법을 알고 싶습니다. 여기 내 코드는 다음과 같습니다 -Linq IN 절에서

int empCount = ctx.tblEmpTran 
       .Count(
        e => e.Id == Id && 
        e.Month == selectedMonth && 
        e.Year == selectedYear && 
        e.employeeId.contains() 
       ); 

다음 쿼리는 contains 방법은 인텔리에 팝업하지 않는, 위의 코드에서 IN

SELECT A.Id FROM dbo.EmployeeDetail A WHERE A.CompanyId = 1 AND A.COLS > 0 

에 있어야한다.

+3

(존재 검사에서보다 더), 이것은 당신이 효과적으로 LINQ를 사용하는 것이 어떻게 의사 코드지만. 실제로 존재하는 모든 것에는 In에 들어 있습니다. – hazimdikenli

+0

여기서 employeeDetail dbset은 두 모델 간의 관계를 설정 했습니까? – hazimdikenli

+0

@Anup 일반 규칙에 따라 e.employeeId가 숫자 (int/long)이면 intellisense가 Contains() 메서드를 표시하지 않습니다. Contains() 메서드는 문자열/컬렉션 유형에서 사용할 수 있습니다. –

답변

0

당신이 확인하고 싶은 직원 ID의 컬렉션을 만들해야하고, 코드 대신이 e.employeeId.contains()

employees.contains(e.employeeId) 
0

것, 당신은이를 사용해야합니다

listOfIds.Contains(e.employeeId) 

listOfIds는 것 int의리스트가 List<int>이고 IN(...) 이후에 괄호 사이에 넣을 ID가 포함됩니다.

2

SQL에서 Linq로 변환하려고했기 때문에 이것은 더 나쁜 방법을 시도 할 수 없었기 때문입니다.

SQL을 모두 잊어 버리고 LINQ 쿼리를 작성해야합니다.

Linq에는 "IN"연산자가 없으므로 컬렉션을 가져와 동일한 값을 얻고 그 값이 Contains인지 확인하십시오.

그래서 시나리오에서 당신은 단순히 유효한 값의 컬렉션을 생성해야 다음 쿼리에서 수행

myCollection.Contains(e.employeeId) 

그것은이다 논리가 아닌 "값이 수집에서 발견된다" "컬렉션 값을 포함합니다." 다시 Linq를 사용할 때 SQL에서 시작하기를 원한다면 항상 이런 종류의 문제가 발생할 것입니다.

알바하리 튜토리얼 how to approach Linq correctly을 확인하면 생산성이 급증 할 것입니다.

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(); 

이는 "모든"이라고