2

複数のアイテムと3つの小道具を持つリストがあります ID、DATE、COMMENT.IDフィールドはデータベースで自動インクリメントされます。

リストに含まれているとしましょう

2,16AUG,CommentMODIFIED
1,15AUG,CommentFIRST
3,18AUG,CommentLASTModified

最小の日付と最新のコメントを持つ単一の ITEM.Item を取得したい。この場合

1,15AUG,CommentLASTModified

LINQ を使用してそれを行う簡単な方法。

4

2 に答える 2

4
orderedItems = items.OrderBy(x => x.Date);

var result = items.First();
result.Comment = items.Last().Comment;
于 2013-08-22T06:21:37.943 に答える
1

リストから 1 つのアイテムを取得するには、次のようにアイテムを並べてから最初のアイテムを取得します。

var result = items
    .OrderByDescending(x => x.Date)
    .First();

ただし、コレクションが空Firstの場合は例外がスローされます。itemsこれは少し安全です:

var result = items
    .OrderByDescending(x => x.Date)
    .FirstOrDefault();

さまざまな列の最小/最大を取得するには、次のようにします。

var result = 
    new Item {
         Id = 1,
         Date = items.Min(x => x.Date),
         Comment = items.Max(x => x.Comment)
    };

ただし、これにはデータベースへの 2 回のトリップが必要です。これはもう少し効率的かもしれません:

var result = 
    (from x in items
     group x by 1 into g
     select new Item {
         Id = 1,
         Date = g.Min(g => g.Date),
         Comment = g.Max(g => g.Comment)
     })
    .First();

または流暢な構文で:

var result = items
    .GroupBy(x => 1)
    .Select(g => new Item {
         Id = 1,
         Date = g.Min(g => g.Date),
         Comment = g.Max(g => g.Comment)
     })
    .First();
于 2013-08-22T06:15:20.647 に答える