簡體   English   中英

使用LINQ查找MAX / MIN列表項?

[英]Find MAX/MIN list item using LINQ?

我有一個具有多個項目和3個道具ID,DATE,COMMENT.ID的列表。ID字段在DATABASE中自動增加。

假設清單包含

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

我想得到一個具有最小DATE和最新評論的ITEM.Item。 在這種情況下

1,15AUG,CommentLASTModified

任何使用LINQ的簡單方法。

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

var result = items.First();
result.Comment = items.Last().Comment;

要從列表中取出一個項目,您可以訂購這些項目,然后選擇第一個項目,如下所示:

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

但是,如果items集合為空,則First將引發異常。 這比較安全:

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)
    };

但這將需要兩次訪問數據庫。 這可能會更有效率:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM