2011-08-15 5 views
3

ObjectContext에 대해 LINQ 쿼리를 작성하고 있습니다. 내가 본질적으로 엔티티에 LINQ 수행해야하는 것은 (I이 작동하지 않습니다 알고 있지만, 나는 설명하기 위해 이런 식으로 일을 해요) 이것이다 :이 가능했던 경우ADO.NET Entity Framework : Where/OrderBY에서 String으로 Int로 변환

from c in context.Table 
where key == int.Parse(c.KeyAsString) 
order by int.Parse(c.KeyAsString) 
select c 

내가 확실하지 않았다. 아무도 몰라요?

감사합니다.

+0

모델 정의 함수가있는 솔루션 : http://stackoverflow.com/q/5754218/270591. – Slauma

+0

관련 질문이 있습니다 : http://stackoverflow.com/q/2410070/146325 – APC

답변

3

다른 방법으로 시도해보십시오.

var keyString = key.ToString(); 
var query = from c in context.Table 
where keyString == c.KeyAsString 
order by c.KeyAsString 
select c 

당신이 문제와이있는 경우 : 나는 "키"는 int 변수가 너무 ToString을 (사용하여 문자열로한다는 캐스트) 및 캐스트를 사용하지 않는 의해 KeyAsString로하고 순서대로 비교하는 것을 사용하는 가정 순서는 ToList() 또는 ToArray()과 같은 메서드를 사용하여 결과를 메모리로 가져 오면 int로 캐스팅하거나 사용자 지정 비교자를 사용할 수 있습니다.

+0

문자열 값을 기준으로 정렬하면 숫자 값으로 정렬하는 것과 같은 순서를 사용하지 않습니다. "11"은 "1"다음에 오는 것이지만 그 전에는 "2". –

+6

@Morawski - ** 주문 C.KeyAsString.Length, c.KeyAsString ** – Aducci

+0

+1 너무 간단합니다. 나는 그것을 결코 생각하지 못했다 : –

1

이것은 가장 깨끗한 해결책은 아니지만 모든 문자열이 유효한 정수인 한 계속 작동합니다. double과 함께 사용할 수도 있습니다.

var query = from c in context.Table 
      let IntOrder = context.Table.Take(1).Select(x => c.KeyAsString).Cast<int>().FirstOrDefault() 
      where IntOrder == key 
      orderby IntOrder 
      select c; 
+0

그게 나를 도왔다! 감사합니다 @Aducci! –

관련 문제