2013-06-14 4 views
9

정수의 연속 숫자가 테이블의 기본 키에 포함되어 있는지 확인하는 linq 쿼리를 작성하는 데 어려움이 있습니다. 따라서 Employees.Id 열에 기본 키가있는 Employees이라는 테이블이 있다고 가정합니다. 이 기본 키가 Sql Server 데이터 유형 INT 인 것으로 가정합니다.Integer Contains Linq 사용

string filter = "456"; 

var results = from e in myDbContext.Employees 
    where e.Id.Contains(filter) 
    select e; 

문제는이 방법으로 정수 데이터 유형에 대한 제공되지 않습니다 포함되어 있다는 것입니다 : 나는 누구의 기본 키와 같은 문자열 456 뭔가에 포함 된 모든 직원을 반환하는 엔티티 프레임 워크 코드 첫 번째를 사용하여 LINQ 쿼리를 작성하려합니다 C#을 ...

+1

은 참고 string.Contains는() 확장 메서드가 아니라 문자열 객체에 대한 정기적 인 방법이다. – recursive

+0

@ 재귀 : 감사합니다. 수정 사항을 포함하도록 질문을 수정했습니다. – Andrew

+1

X.L.Ant가 솔루션을 제안했지만 컬럼의 데이터 유형을'char' 또는'varchar'로 변경하는 것이 좋습니다. 숫자 형의 목적은 값의 * magnitude *을 저장하고 처리하는 것인데, 이는 int 형이 "greater than"및 "less than"와 같은 내장 함수를 갖는 이유입니다. ID의 개별 기호가 실제 의미를 지닌다면 실제로 저장하는 것은 숫자 기호를 사용하지만 크기를 나타내지 않는 * 코드 *입니다. – JDB

답변

20

시도 :

var results = from e in myDbContext.Employees 
    where SqlFunctions.StringConvert((double)e.Id).Contains(filter) 
    select e; 
+0

'ToString()'호출이 SQL로 변환 될 확신합니까? –

+0

"Linq to Entities가 'System.String ToString()'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없다는 오류가 발생합니다." – Andrew

+0

@Andrew Edited, 이것이 더 잘 작동합니다. –

2

당신은 모두 문자열로 변환 한 다음 쿼리를 할 수 있습니다. 귀하의 경우 :

string filter = "456"; var results = from e in myDbContext.Employees where e.Id.ToString().Contains(filter) select e;

+1

ToString()은'NotSupportedException' 타입의 예외를 던집니까? – sepehr

관련 문제