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

У меня следующий запрос Sql, который объединяет две таблицы и группу по дате и идентификатору пользователя

Таблица пользователей

UserName UserId

LookupScannedHistory

HistoryId UserId ScannedDate ScannedCount

Я написал следующий SQL-запрос для присоединения к таблице и группе по идентификатору пользователя и дате сканирования, удаляя время varaint

SELECT 
      l.[UserID]
      ,CAST([ScannedDate] AS DATE)
      ,Sum([ScannedCount])
      ,[UserName]
  FROM [dbo].[LookupScannedHistory] l
  Join [dbo].[UserMaster] u
  on l.UserID = u.UserId
  group by l.UserId, u.UserName, CAST([ScannedDate] AS DATE)

Я хочу преобразовать это в linq.

Я пробовал это

 (from log in dataContext.LookupScannedHistories
          join user in dataContext.UserMasters
          on log.UserID equals user.UserId 
          where log.ScannedDate >= fiveDayPriorDate
           orderby log.ScannedDate
           group log by new
           {
           ScannedDateOnly = EntityFunctions.TruncateTime(log.ScannedDate),
           log.UserID
           } into dateClickedHistory

          select dateClickedHistory                                                                  
        ).ToList();

Я сделал это, это дает то, что я хочу, но я не могу включить имя пользователя, объединив объединение и группу по

1 Ответ

0 голосов
/ 15 мая 2018

Я нашел решение.

var usersReportGroupList = (from log in dataContext.LookupScannedHistories
                            join user in dataContext.UserMasters
                            on log.UserID equals user.UserId 
                            where log.ScannedDate >= fiveDayPriorDate
                            orderby log.ScannedDate
                             group new { user.UserName, log.ScannedCount, 
                              log.ScannedDate} 

                              by new
                              {
                               ScannedDateOnly = 
                             EntityFunctions.TruncateTime(log.ScannedDate),
                             log.UserID,
                             user.UserName
                             } 
                             into dateClickedHistory
                              select dateClickedHistory                                              
                             ).ToList();
   var usersReportList = new List<LookupScannedHistoryDetails>();
                    foreach (var group in usersReportGroupList)
                    {
                        usersReportList.Add(new LookupScannedHistoryDetails()
                        {
                            ScannedCount = group.Sum(x => x.ScannedCount.Value),
                            ScannedDate = group.Key.ScannedDateOnly.Value,
                            UserId = group.Key.UserID.Value,
                            UniqueCount = group.Count(),
                            UserName = group.Key.UserName
                        });
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...