与Linq的小组不同

Sag*_*gar 0 c# linq sql-server linq-to-sql

ID  UserName    BookType    bookID

1   Krish   1   1
1   Krish   1   2
1   Krish   2   1
1   Krish   2   2
2   Ram     1   1    
3   Raj     1   1
3   Raj     1   2
Run Code Online (Sandbox Code Playgroud)

我有上面的表,我想获得每个用户的独特的booktype计数和bokkID计数,我能够在sqlserver中写这个,但是当我来LINQ无法编写查询时.

我需要以下输出,

ID  UserName    BookType    bookID

1   Krish   2   2
2   Ram     1   1 
3   Raj     1   2
Run Code Online (Sandbox Code Playgroud)

Rah*_*ngh 9

这应该给你正确的结果: -

var result = Userlist.GroupBy(x => new { x.ID, x.UserName })
                     .Select(x => new
                                 {
                                     ID = x.Key.ID,
                                     UserName = x.Key.UserName,
                                     BookType = x.Max(z => z.BookType),
                                     BookId = x.Max(z => z.BookId)
                                 });
Run Code Online (Sandbox Code Playgroud)

更新:

虽然您同意回答,但我错过了您的要求,上面发布的答案是错误的,因为它获取了最大的BookType和BookId.以下是获取非重复计数的查询: -

var result = Userlist.GroupBy(x => new { x.ID, x.UserName })
                     .Select(x => new
                         {
                            ID = x.Key.ID,
                            UserName = x.Key.UserName,
                            BookType = x.Select(z => z.BookType).Distinct().Count(),
                            BookId = x.Select(z => z.BookId).Distinct().Count()
                         });
Run Code Online (Sandbox Code Playgroud)