2012-05-10 15 views
13

ID、ShortCode、UploadDateという3つの列を持つテーブルがあります。LINQグループは、結果のグループを注文します。

LINQを使用して結果をショートコードでグループ化し(すべての結果を保持する)、それらのグループを順序付けしてリストを返すとします。

私は、次があります。

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList<PDFDocument>(). 
GroupBy(b=>b.ShortCode) 
.SelectMany(b=>b).ToList<PDFDocument>() 

私はすべての結果を返すようにしたい、ショートによってグループ化され、UploadDateやグループによってソートされた各グループ内のアイテムは、それの中で最も最近の文書を持っているものをソート最初。

これが可能であれば、誰でも知っていますか?

答えて

31

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
    .AsEnumerable() 
    .OrderByDescending(d => d.UploadDate) 
    .GroupBy(d => d.ShortCode) 
    .SelectMany(g => g) 
    .ToList(); 

このはず

  • 注文(そう新しい順降順)アップロード日付別項目のショートによって
  • その後、グループにそれらを試してみてください:それは少しにクエリを複雑にしますコード - 各グループ内でアイテムはまだソートされています
  • グループはまだ解説されていますオーダーを終了、パフォーマンスはあなたが多くの

    それぞれの内容をソート
    rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
        .AsEnumerable() 
        .GroupBy(d => d.ShortCode) 
        .Select(g => g.OrderByDescending(d => d.UploadDate)) 
        .OrderByDescending(e => e.First().UploadDate) 
        .SelectMany(e => e) 
        .ToList(); 
    

    をやったほうが良い問題がある場合ので、再び

  • を注文する必要が最後に1つのリストに

を結果を連結しません最初にすべてをソートしてからグループ化するのではなく、別々にグループ化します。

+0

ありがとう、これは私が欲しかったものです。 – Ketchup

+1

私は "OrderBy" + "GroupBy" + "OrderBy"を置く順序について疑問を抱いていましたが、これは完全に答えます – EdmundYeung99

+0

これはList型のエンティティを返していますが、グループ型であることが必要です。取得します。 'System.Collections.Generic.List 'を暗黙的に 'System.Collections.Generic.IEnumerable >'に変換することはできません。明示的な変換があります(キャストがありませんか?) –

5

実際、短いコードでグループ化したくない場合は、そのグループによって注文したいと考えています。だから、次のクエリは、トリックを行う必要があります。

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.OrderBy(b => b.ShortCode) 
.ThenBy(b => b.UploadDate) 
.ToList() 

編集 あなたが本当にGROUPBYを使用したい場合、あなたはので、この方法を行うことができます。

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.SelectMany(grouping => grouping.OrderBy(b => b.UploadDate)) 
.ToList() 

しかし、私はそれを阻止。あなたが最初にグループを望んでいないのであれば、グループを作成するという点はありません!

第二編集

私はあなたがあまりにもUpdateTimeが注文したグループを望んで取得できませんでした。

rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession) 
.ToList() 
.GroupBy(b => b.ShortCode) 
.Select(grouping => grouping.OrderByDescending(b => b.UploadDate)) 
.OrderByDescending(grouping => grouping.First().UploadDate) 
.SelectMany(grouping => grouping) 
.ToList() 
+0

少なくとも彼がなぜそうしたのか説明した人は、 – Falanwe

+0

これはグループ内の要素の両方を日付順に並べ替えますか?グループ化された結果を注文することもできますか? – Ketchup

+0

最初のShortCodeを持つすべての要素は、結果のリストに最初に含まれ、UpdateTimeによって順序付けられ、次にすべての要素が2番目のShortCodeになり、同様に順序付けられます。結果は、主に列で、次に別の列で要素を並べ替えるときに得られる結果に似ています。 – Falanwe

関連する問題