как написать отчет о различном количестве в Linq - PullRequest
0 голосов
/ 20 декабря 2018

Предположим, у меня есть следующий запрос на Sql

select UserID,count(distinct ip) as NumberOfIPUsed from  UserLogs 
group by UserID

. Я хочу написать это с помощью Linq

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вам необходимо использовать функцию Distinct, которая недоступна непосредственно в выражениях понимания, поэтому требуется некоторый функциональный стиль:

var res = await (from ul in context.UserLogs
                 group ul by ul.UserId into grouped
                 select new {
                   UserId = grouped.Key,
                   Count = group.Select(x => x.ip).Distinct().Count()
                 }).ToListAsync();
0 голосов
/ 20 декабря 2018

Ну, во-первых, вам нужно сгруппировать по UserID:

UserLogs.GroupBy(ul => ul.UserID)

Затем вы хотите получить идентификатор пользователя и количество различных ip из этого:

UserLogs.GroupBy(ul => ul.UserID).Select(g => new {UserID = g.Key, Count = g.Select(ul => ul.ip).Distinct().Count()})
...