1

タイトルで何を求めているのか、これ以上うまく表現できませんでした。

これが私が探しているものです。

私が持っている特定のオブジェクトDateTimeStringプロパティの無秩序なリストがあります。

Stringプロパティには次のような値があります(これは数字ではなく文字列であり、常にK文字であることに注意してください。数字だけで注文する必要があります):

K07000564, 
K07070000
K07069914
K07026318
K07019189

私が欲しいのは日付でリストを注文することです...しかし、文字列値が他の日付と一緒にコレクションに存在する場合に注文するとき、私はこの直後にそれらを注文したいと思います(IdFindersのそのミニグループでも日付で)...その後、注文を続けます...

このようなもの:

編集

IdFinderによる注文が機能しないことを明確にするために、例を編集しました...日付で注文する必要があります。日付で注文するときに、コレクション内にIdFinderが複数回存在する場合は、この最後の直後に表示されるはずです。それらの残りの部分などを各idfinderで注文し続けます

ID         Date
**K07000564**   Today
K07000562   Yesterday
K07000563   The Day Before Yesterday
**K07000564** The day before the day before yesterday

する必要があります

K07000564 Today
K07000564 The day before the day before yesterday
K07000562 Yesterday 
K07000563  The Day Before Yesterday 

以前のプロジェクトのSQLServer2008で、次のような方法でこれを実現しました。

WITH B
AS
(
    SELECT 
        ID, 
        MAX(DATE_COLUMN) DATE_COLUMN, 
        ROW_NUMBER() OVER (ORDER BY MAX(DATE_COLUMN) DESC) RN
    FROM MYTABLE
    GROUP BY ID

)

SELECT *
FROM MYTABLE c
, B
WHERE ID= b.ID
ORDER BY b.rn, c.DATE_COLUMN desc;

しかし、私はLinqが苦手で、Linqでこれをどのように行うのかわかりません。

おそらく重要な注意事項私は.NEt2.0を使用しているため、利用可能なLINQはありませんが、Linqbridgeを使用してLinqを使用しています。

私はこれを試しましたが、お気づきのように、これは機能しません

oList.OrderBy(i => i.IdFinder).ThenByDescending(i => i.OperationDate);

これを明確に説明したいと思います

4

3 に答える 3

5
var result = oList.OrderByDescending(x => x.OperationDate)
                  .GroupBy(x => x.IdFinder)
                  .SelectMany(x => x);
于 2012-12-28T19:07:16.943 に答える
2

私はこれがトリックを行うべきだと思います:

var sortedList = oList
    .GroupBy(x => x.IdFinder)
    .Select(g =>
        new
            {
                MaxOpDate = g.Max(x => x.OperationDate),
                Items = g
            })
    .OrderByDescending(g => g.MaxOpDate)
    .SelectMany(g => g.Items.OrderByDescending(x => x.OperationDate));

ただし、Linqbridgeではテストしていません。

于 2012-12-28T19:11:25.663 に答える
0

これを試して

oList.OrderBy(i => int.parse(i.IdFinder.Substring(1,i.IdFinder.Length-1)).ThenByDescending(i => i.OperationDate);

まず、IdFinderから数値を抽出します。この値の順序です。

->は常に有効な「K######」であると想定されます。ここで、#はInt32.MaxValuei.IdFinder未満の数値です。

于 2012-12-28T18:56:17.083 に答える