2011-07-01 17 views
0

次のクエリがあります。 RowKeyの数字順 で結果を並べ替えるのは簡単な方法ですか?現在、RowKeyは文字列です。 _rowDataをソートして、このソート順を試したいので、このクエリを変更せずに、1行の変更を探していて、クエリをやり直さないようにしたいと思います。LINQクエリの結果を並べ替える方法

var _rowData = (from qu in _que.GetAll(
    u => u.PartitionKey == partitionKey) 
    select new { 
    qu.PartitionKey, 
    qu.RowKey, 
    qu.Style, 
    qu.ShortTitle, 
    ModifiedToString = String.Format("{0:MM/dd/yyyy HH:mm}", qu.Modified) 
}); 

LINQクエリの外部でソートを行いたいとします。なぜなら、実際には、ユーザーがRowKey、ModifiedToString、およびShortTitleのような種類を選択できるようにするためです。

答えて

1

、あなたはしないでください元のクエリを変更すると、同じ値が列挙されます。

var _rowData = ... 
var _rowDataSortedByRowKey = _rowData.OrderBy(u => u.RowKey); 
var _rowDataSortedByModifiedToString = _rowData.OrderBy(u => u.ModifiedToString); 
var _rowDataSortedByShortTitle = _rowData.OrderBy(u => u.ShortTitle); 
var _rowDataSortedByOther = _rowData.OrderBy(...); 
0

あなたはorderbyキーワードを使用してLINQクエリの要素を注文することができます。

[並べ替え - シンプルな2

このサンプルでは、​​長さによって単語のリストをソートするORDERBYを使用しています。

public void Linq29() 
{ 
    string[] words = { "cherry", "apple", "blueberry" }; 

    var sortedWords = 
     from w in words 
     orderby w.Length 
     select w; 

    Console.WriteLine("The sorted list of words (by length):"); 
    foreach (var w in sortedWords) 
    { 
     Console.WriteLine(w); 
    } 
} 

(長さ)の単語のソートされたリスト:

あなたはまた、 Enumerable.OrderBy Extension Methodを使用することができます
 
apple 
cherry 

var sortedWords = words.OrderBy(w => w.Length); 

あなたは異なる基準で注文したい場合は、あなたを各基準ごとに異なるキーセレクタを渡すことができます:

ここ
+0

申し訳ありませんが、私はLINQクエリの外でこれを実行したいと思います。なぜなら、実際には、ユーザーがRowKey、ModifiedToString、およびShortTitleのような種類を選択できるようにするためです。私はこれが上記の質問の後に3つの異なるリゾートオプションであると考えていました。 –

+0

@Robert Dawson:最初のクエリを入力として2番目のクエリを作成しますか? 'var query = from x _rowData orderby x。RowKey select x; ' – dtb

+0

dtbに感謝します。私はこれが私が望む解決策だと思います。ただ一つの質問。数値をソートできるように文字列を変更するにはどうすればよいですか?現在、行9は行80の後にあります。 –

0

屋に行く:

_rowData.Sort((a, b) => Convert.ToInt32(a.Key).CompareTo(Convert.ToInt32(b.Key))); 
0

は明確な文でDataRowComparer.Defaultを指定してみてください。

例:

var query = (from c in functiongettable().AsEnumerable() 
      orderby c.Field<string>("Name") 
      select c).Distinc(DataRowComparer.Default); 
+0

DataRowComparer?申し訳ありませんが、それは何ですか?私はRowIDを使用しています。これは数値のROWIDの文字列表現です。 –

0
あなたはSystem.Linq.Enumerable.OrderByDescending()を使用することができます

のような何か:あなたは[並べ替え拡張子を使用する場合

(from qu in _que.OrderByDescending(u => u.RowKey).GetAll(
    u => u.PartitionKey == partitionKey) 
0

System.Linqの名前空間でのOrderBy拡張メソッドを使用してみてください:

http://msdn.microsoft.com/en-us/library/bb549264.aspx

この方法は、あなたが条件付きでクエリに注文を追加することができます。

var _rowData = (from qu in _que.GetAll(
    u => u.PartitionKey == partitionKey) 
    select new { 
    qu.PartitionKey, 
    qu.RowKey, 
    qu.Style, 
    qu.ShortTitle, 
    ModifiedToString = String.Format("{0:MM/dd/yyyy HH:mm}", qu.Modified) 
}); 

// Let's say the user has selected they want to sort by RowKey 
// and ModifiedToString, but not ShortTitle. 
bool sortByRowKey = true; 
bool sortByModifiedToString = true; 
bool sortByShortTitle = false; 

var query = _rowData.AsQueryable(); 

if(sortByRowKey) { 
    query = query.OrderBy(x => x.RowKey); 
} 

if(sortByModifiedToString) { 
    query = query.OrderBy(x => x.ModifiedToString); 
} 

if(sortByShortTitle) { 
    query = query.OrderBy(x => x.ShortTitle); 
} 

// Now let's call ToList() to execute the query and get the ordered data. 
var _orderedData = query.ToList(); 
関連する問題