user3157809
user3157809

Reputation: 7

Linq - Get last entry from different customers

I try to create a linq query but unfortunately I have no ideas to resolve my problem. I would like get the highest entry of all customers and form this result only 5 entries sort by date.

ID   Date           ID_Costumer    
 1  - 01.01.2014  -   1    
 2  - 02.01.2014  -   2     
 3  - 02.01.2014  -   1    
 4  - 03.01.2014  -   1 --> this value    
 5  - 04.01.2014  -   3    
 6  - 05.01.2014  -   3 --> this value    
 7  - 05.01.2014  -   4      
 8  - 06.01.2014  -   4 --> this value    
 9  - 08.01.2014  -   5 --> this value    
 10 - 09.01.2014  -   6 --> this value

I try it with this query

  var query = from g in context.Geraete 
              where g.Online && g.AltGeraet == false 
              select g;

  query.GroupBy(g => g.ID_Anbieter).Select(g => g.Last());
  query.Take(5);

but it doesn't work.

Upvotes: 1

Views: 44

Answers (1)

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236208

You should assign results of selecting last item from group back to query variable:

 query = query.GroupBy(g => g.ID_Anbieter).Select(g => g.Last());
 var result = query.Take(5);

Keep in mind - operator Last() is not supported by Linq to Entities. Also I think you should add ordering when selecting latest item from each group, and selecting top 5 latest items:

 var query = from g in context.Geraete 
             where g.Online && !g.AltGeraet
             group g by g.ID_Anbieter into grp
             select grp.OrderByDescending(g => g.Date).First();

 var result = query.OrderByDescending(x => x.Date).Take(5);

Upvotes: 2

Related Questions