簡體   English   中英

我如何使用Linq / Linq to Sql來做到這一點?

[英]How can i use Linq / Linq to Sql to do this?

我有一個審核表,並且試圖使用Linq找出如何掌握所有人最近的審核行動。 我只是不確定如何。

樣本架構

審核表(從技術上講,它實際上是一個視圖)

AuditId   UserName   Action    CreatedOn
1         Bob        Action1   2000-01-01
2         Bob        Action2   2000-01-02
3         Bob        Action8   2000-01-03
4         Jane       Action1   2000-01-01
5         Bob        Action1   2000-01-05
6         Jane       Action3   2000-01-05
7         Andrew     Action4   2000-01-05
8         Siena      Action1   2000-01-06
9         Sarah      Action1   2000-01-07
10        Harry      Action6   2000-01-09

所以,為了結果,我會追求...

5, Bob, Action1, 2000-01-05
6, Jane, Action3, 2000-01-05
7, Andrew, Action4, 2000-01-05
8, Siena, Action1, 2000-01-06
9, Sarah, Action1, 2000-01-07
10, Harry, Action6, 2000-01-09

有人可以幫忙嗎?

(哦,如果我需要索引某些內容,請提出建議。)

謝謝:)

我認為這看起來像這樣:

var query = from action in db.Actions
            orderby action.CreatedOn descending
            group action by action.UserName into groupedActions
            let mostRecent = groupedActions.First()
            select new { UserName = groupedActions.Key,
                         LatestId = mostRecent.AuditId,
                         LatestAction = mostRecent.Action,
                         LatestDate = mostRecent.CreatedOn };

如注釋中所述,這將適用於LINQ to Objects,但分組可能不會保留SQL中的順序。 同樣,“ mostRecent”記錄可能會為您提供所需的一切。 這是解決這兩個問題的另一個查詢:

var query = from action in db.Actions
            group action by action.UserName into groupedActions
            select groupedActions.OrderByDescending(a => a.CreatedOn).First();

為CreatedOn和UserName添加索引。

另一個簡單的方法是:

List<Audit> result = ctx.Audit.GroupBy(g => g.UserName)
                        .Select(t => t.OrderByDescending(o => o.CreatedOn)
                                      .Select(s => s)
                                      .First())
                        .ToList();

暫無
暫無

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

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