2012-03-23 6 views
0

은 내가식별자 대신 문자열 연결을 사용하여 linq 쿼리를 수행 할 수 있습니까?

var queryItems = rawQuery.ObsDataResultList.AsQueryable().Where("Name = @0 AND AuthoredDate = " + dateKey.ToString(), selectedItem).ToList();

주 내가 변경 한 유일한 식별자를 제거 고지 쿼리를 업데이트 할

var queryItems = rawQuery.ObsDataResultList.AsQueryable().Where("Name = @0 AND AuthoredDate = @1" +, selectedItem, dateKey).ToList();

잘 작동하는 쿼리가 있습니다. 이제 오류가 발생합니다.

Operator '=' '피연산자 유형'DateTime? '과 호환되지 않습니다. 및 'Int32'

어떻게 원래 쿼리로 되돌리지 않고 오류를 해결할 수 있습니까?

+2

왜 그렇게하고 싶습니까?! 왜 고의로 좋은 쿼리를 망치고 싶습니까? –

+0

@ MarkByers - 어디서 그런 진술의 목록을 가져 와서 구조체의 상수로 저장할 계획입니다. 구조체는 지원되는 쿼리에 대한 단일 참조 지점이 될 수 있습니다. 목록에있는 매개 변수를 사용하면 매개 변수의 수가 크게 달라질 수 있으므로 어렵습니다. 첫 번째 양식에 기술적 이점이 있습니까? E.G. 주입을 피하기 위해 params를 매개 변수화하는 것과 비슷한 것이 있습니까? –

+0

@PBrianMackey : 예, 주사를 맞을 수 있습니다. 매개 변수 목록을 저장하는 것이 왜 어려운가요? –

답변

3
당신은 누락

따옴표 :

.Where("Name = @0 AND AuthoredDate = \"" + dateKey + "\"") 

그래도이 같은 코드를 망치고 정말 나쁜 생각처럼 보인다. 원래 검색어가 훨씬 더 좋아 보입니다.

+0

감사합니다. 나는 이것을 명심하고 확실하게 원래 형식을 기반으로 한 해결책을 도출해냅니다. –

+0

@ P.Brian.Mackey : 원래 작은 따옴표가 필요할 것이라고 가정했지만 인터넷 검색 후에 [내 답변] (http://stackoverflow.com/a/2288328/61974)에서 큰 따옴표를 사용하여 답변을 변경했습니다. . –