2012-08-30 3 views
0

// 모음 "필드는"이 사전 키 값 쌍을 포함 // 열 "fieldID가"사전을 찾아 DataRow []의 행을 재정렬하는 방법은 무엇입니까?

DataRow[] fields = GetFields(); 

와 행의 세트를 포함한다. 키는 fieldID가 년대를 대표하는 값을 나타냅니다 ORDERID의

Dictionary<string, int> orders = new Dictionary<string, int>(); 
orders = LoadOrders(); 

내가 사전에 ORDERID 년대의 순서에서 "필드"모음의 순서를 변경해야합니다. 사전은 FieldId를 조회하고 OrderId를 얻기 위해 상호 참조로 사용해야합니다. 사람이 어떤 아이디어가있는 경우

Sample data in fields: 

Books 
Movies 
Electronics 

Sample data in orders: 

<Books, 2> 
<Movies, 3> 
<Electronics, 1> 

The output by reordering the "fields" should be : 

Electronics 
Books 
Movies 

, 당신은 공유하시기 바랍니다 수 있습니까? 고맙습니다.

답변

1

이 작업을해야합니다 선물은 fields 컬렉션입니다.

+0

대단히 고마워요. DataRow []로 res를 만들려면 ToArray()가 필요합니까? – Jyina

+0

예,하지만 두 번째 경우에는'fields' 배열이 새로운 배열을 만들지 않고 정렬되기 때문에 그렇지 않습니다. – digEmAll

0
var result = (from entry in myDict 
       orderby entry.Value ascending 
       select entry) 
       .ToDictionary(pair => pair.Key, pair => pair.Value); 
1

구조에 LINQ! 당신이 현재 위치에서 일종의 원하는 경우,

var res = fields.OrderBy(x => orders[x.Field<string>("FieldId")]).ToArray(); 

을 또는 : 당신이 확인해야 물론

Array.Sort(fields, 
      (a,b) => orders[a.Field<string>("FieldId")] 
        .CompareTo(orders[b.Field<string>("FieldId")])); 

orders 사전이 모든 값을 포함

var results = fields.OrderBy(field => orders[field["FieldID"]]); 
+0

'field [ "FieldID"]'는 객체를 반환합니다. 문자열로 변환해야합니다. – digEmAll

+0

@digEmAll 그의 데이터 테이블의 구조를 모른다는 것을 감안할 때 나는 그가 가장 편안하게 매너를 쓸 때 필드 ID를 가져올 수 있다고 생각했다. 그것은 게시물의 접선입니다. – Servy

+0

글쎄, 내가 컴파일하는 코드를 게시하는 경향이 내 제안의 이유입니다. 그러나 "ToString()"또는 "as string"코드를 추가하여 답의 정보량이 너무 많이 증가하지 않는다는 것에 동의합니다 ... – digEmAll

관련 문제