Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Row_number over (Partition by xxx) in Linq?
- id | inst | name
- ____________________
- 1 | guitar | john
- 2 | guitar | george
- 3 | guitar | paul
- 4 | drums | ringo
- 5 | drums | pete
- IEnumerable <beatle>...
- class Beatle
- {
- int id;
- string inst;
- string name ;
- }
- select *,Row_Number() over (partition by inst order by id) as rn from myTalbe
- inst | name | rn
- _____________________
- guitar | john | 1
- guitar | george | 2
- guitar | paul | 3
- drums | ringo | 1
- drums | pete | 2
- var o = beatles.OrderBy(x => x.id).GroupBy(x => x.inst)
- .Select(g => new {g, count= g.Count()})
- .SelectMany(t => t.g.Select(b => b)
- .Zip(Enumerable.Range(1,t.count), (j,i) => new {j.inst, j.name, rn = i}));
- foreach (var i in o)
- {
- Console.WriteLine("{0} {1} {2}", i.inst, i.name, i.rn);
- }
- Guitar John 1
- Guitar George 2
- Guitar Paul 3
- drums Ringo 1
- drums Pete 2
- var grouped = beatles.OrderBy( x => x.id )
- .ToList() // required because SelectMany below doesn't evaluate to SQL
- .GroupBy( x => x.inst );
- var rns = grouped.ToDictionary( x => x.Key, x => 1 );
- var result = grouped
- .SelectMany( x => x.Select(
- y => new { inst = y.inst, name = y.name, rn = rns[y.inst]++ } ) );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement