이전 포스트에서 특정 데이터의 Query를 할 때 LINQ에서 제공하는 select 문자을 이용하여 아래와 같이 처리한 적이 있다.
var result = from g in this.context.AnalysisSumDataEntrywhere g.PartitionKey == "AnalysisSumData"select g;
그런데 일반적인 LINQ 방법으로 저 내용을 Sort를 하려면 아래와 같이 되는 줄 알았다.
var result = from g in this.context.AnalysisSumDataEntry
where g.PartitionKey == "AnalysisSumData"
orderby g.Count
select g;
굵게 해서 표시한 저 orderby를 사용하고, 실제 Sort 할 필드에 대해서 정의한 내용을 넣으려 했다.
( 참고로 AnalysisSumDataEntry 에는 Count와 Index 라는 int 형 프로퍼티를 가지고 있다. )
그런데, 위와 같이 처리하려고만 하면, 결과 값에 Exception 이 담겨 있어, toList 부터 ElementAt 까지 뭐든 메소드든 다 Exception을 뿜어버리고 만다. 즉 결과에 오류가 있다는 것이다.
혹시나 하는 마음에 orderby를 지우자 정상적으로 동작한다.
분명 숫자를 의미하는 int 형일텐데.... 라는 생각에 이런 저런 고민을 무럭 무럭 자랐다.
그래서 결국 편법을 택했고 그 방법은 아래와 같다.
private IEnumerable<AnalysisSumDataEntry> SelectBase(){var result = from g in this.context.AnalysisSumDataEntrywhere g.PartitionKey == "AnalysisSumData"select g;return result;}public List<AnalysisSumDataEntry> Select(){IEnumerable<AnalysisSumDataEntry> result = SelectBase();List<AnalysisSumDataEntry> list = result.ToList<AnalysisSumDataEntry>();list.Sort(delegate(AnalysisSumDataEntry src, AnalysisSumDataEntry tgt){return src.Count - tgt.Count;});return list;}
즉 Generic 에서 제공하는 List 템플릿에 때려 박고, 그 내용을 가지고 List의 Sort를 사용하여 Sort 해버렸다.
지금 방식대로 하면 Desending 즉 내림 차순이 되고 Asending 즉 오름 차순으로 하려면, 굵게 해 놓은 return 값의 식을 역순으로 바꾸면 된다. ( return tgt.Count - src.Count )
이게 답인지는 모르겠지만.. 현재로는 저렇게 밖에는....
아무래도 데이터 선언 방법 부터 차근 차근 LINQ를 따라가봐야 겠다.
728x90