이전 포스트에서 특정 데이터의 Query를 할 때 LINQ에서 제공하는 select 문자을 이용하여 아래와 같이 처리한 적이 있다.
var result = from g in this.context.AnalysisSumDataEntry
                       where 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.AnalysisSumDataEntry
                         where 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

+ Recent posts