2013-04-06 3 views
1

linq-to-entities 쿼리에서 nvarchar 열에 대해 쿼리 할 때 공백을 더 짧은 길이의 값 앞에 추가하는 방법은 무엇입니까?LINQ to Entities 쿼리에 공백을 사전에 추가하는 방법

필자는이 기능을 사용하여 특정 필드의 적절한 정렬을 용이하게합니다. 나는 거의 모든 테이블에 부품 번호를 열이 포함 된 데이터베이스가

:

여기 내 시나리오입니다. 이러한 부품 번호 열은 데이터베이스에서 nvarchar (20)로 표시됩니다. 그들은 대개 6 자리와 8 자리 부품 번호의 조합을 포함합니다. 이 부분의 "숫자"의 대다수는 사실 숫자입니다. 일부는 숫자가 아닙니다. 결과적으로 정수가 아닌 문자열로 표현됩니다.

이 부품 번호는 숫자가 아닌 문자열로 표시되기 때문에 제대로 정렬되지 않습니다. 6 자리와 8 자리 값은 별도로 그룹화되지 않고 혼합되어 있습니다. 그래서 정렬 문제를 해결하기 위해 더 짧은 길이의 값을 선행 공백으로 채 웁니다.

나는이 열 오히려 보다는 NVARCHAR NCHAR 로 저장한다면, 나는 자동으로 패딩을 얻을 것이라는 점을 깨닫는다. 그러나이 시점에서이 열의 데이터 형식을 변경하는 것은 옵션이 아닙니다. 난 내 자신의 LINQ 쿼리 공예 때

, 나는 제대로 정렬 할 수 있습니다 (예 : 그리드와 같은) 다른 도구가 자동으로 쿼리를 작성할 때

db.table.Select(_ => _.partNumberColumn).OrderBy(_ => _.Length).ThenBy(_ => _); 

문제가 발생합니다. 그런 다음 추가 정렬 요구 사항에 대해 알지 못합니다. 따라서 짧은 길이의 값 앞에 공백을 추가하는 것이 좋은 해결책 인 것 같습니다.

다음은 검색어 예입니다. 모델을 만들 때 단순히 값을 가져 오는 것이 아니라 6 문자 값에 2 개의 공백을 앞에두고 싶습니다.

_db.HubAssembliesWides 
    .Select(_ => 
     new Models.HubAssemblyModel() 
     { 
      HubAssemblyNumber = _.HubAssemblyNumber, 
      DetailedOnNumber = _.DetailedOnNumber, 
      HubMachiningNumber = _.HubMachiningNumber, 
      HubCastingNumber = _.HubCastingNumber, 
      ComponentHubAssemblyNumber = _.ComponentHubAssemblyNumber 
     } 
    ); 

그래서 대신

HubAssemblyNumber = _.HubAssemblyNumber 

나는
HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? " " + _.HubAssemblyNumber : _.HubAssemblyNumber 

가이 작업을 수행 할 수 줄까? 감사!

답변

2

놀람! 나는 내가 제안한 문법이 실제로 작동한다는 것을 깨닫지 못했다. T-SQL에 LINQ - 투 - 엔티티 번역 할 때

HubAssemblyNumber = _.HubAssemblyNumber.Length == 6 ? " " + _.HubAssemblyNumber : _.HubAssemblyNumber 

경우 문으로 번역 가져옵니다.