次の3つの列、ID、ShortCode、UploadDateを持つテーブルがあります。
LINQを使用して、結果をショートコードでグループ化し(すべての結果を保持し)、それらのグループを順序付けてリストを返します。
私は次のものを持っています:
rawData.Provider.CreateQuery<PDFDocument>(qb.rootExperession)
.ToList<PDFDocument>().
GroupBy(b=>b.ShortCode)
.SelectMany(b=>b).ToList<PDFDocument>()
ShortCodeでグループ化されたすべての結果、UploadDateでソートされた各グループ内のアイテム、および最新のドキュメントが最初に含まれるグループでソートされたグループを返します。
これが可能かどうか誰でも知っていますか?
試して
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();
最初にすべてをソートしてからグループ化するのではなく、各グループのコンテンツを個別にソートします。
実際、短いコードでグループ化するのではなく、それらで並べ替えます。したがって、次のクエリでこのトリックを行う必要があります。
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()
しかし、私はそれを落胆させます。そもそもグループが必要ない場合は、グループを作成しても意味がありません。
2番目の編集
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()