Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Lambda中重写此SQL-使用count和groupby_C#_Sql_Linq_Lambda - Fatal编程技术网

C# 在Lambda中重写此SQL-使用count和groupby

C# 在Lambda中重写此SQL-使用count和groupby,c#,sql,linq,lambda,C#,Sql,Linq,Lambda,我一直在用Lambda重写这个SQL: SELECT TOP 1000 COUNT(LoginDateTime) ,[LoginDateTime] ,[Culture] FROM [LearningApp].[dbo].[UserActivities] group by LoginDateTime, Culture 结果: +-----+---------------------------+----------+ | | LoginDateT

我一直在用Lambda重写这个SQL:

SELECT TOP 1000 COUNT(LoginDateTime)
      ,[LoginDateTime]
      ,[Culture]
  FROM [LearningApp].[dbo].[UserActivities]
  group by LoginDateTime, Culture
结果:

+-----+---------------------------+----------+
|     |      LoginDateTime        |  Culture |
+-----+---------------------------+----------+
|  1  |  2016-07-14 12:21:23.307  |    de    |
|  4  |  2016-07-13 12:21:23.307  |    en    |
|  2  |  2016-07-14 12:21:23.307  |    en    |
+-----+---------------------------+----------+
我的代码是:

public List<UserActivityResponseContract> GetUserActivity()
{
    var userActivityResponseContracts = new List<UserActivityResponseContract>();

    var userActivitiesList = _baseCommands.GetAll<UserActivity>()
        .Select(x => new
        {
            x.LoginDateTime, 
            x.Culture
        })
        .GroupBy(x => new { x.LoginDateTime, x.Culture});

    foreach (var userActivity in userActivitiesList)
    {
        userActivityResponseContracts.Add(new UserActivityResponseContract
        {
            ActivityDate = userActivity.Key.LoginDateTime.ToShortDateString(),
            NumberOfTimesLoggedIn = userActivity.Count(),
            Culture = userActivity.Key.Culture
        });
    }
    return userActivityResponseContracts;
}
public List GetUserActivity()
{
var userActivityResponseContracts=new List();
var userActivitiesList=\u baseCommands.GetAll()
.选择(x=>new
{
x、 登录时间,
x、 培养
})
.GroupBy(x=>new{x.logindatime,x.Culture});
foreach(userActivitiesList中的var userActivity)
{
添加(新的UserActivityResponseContract)
{
ActivityDate=userActivity.Key.LoginDateTime.ToSortDateString(),
NumberOfTimesLoggedIn=userActivity.Count(),
Culture=userActivity.Key.Culture
});
}
返回userActivityResponseContracts;
}
这似乎不是很难,但我有点卡住了。

方法语法:

var result = _baseCommands.GetAll<UserActivity>()
                          .GroupBy(x => new { x.LoginDateTime, x.Culture})
                          .Select (x => new UserActivityResponseContract
                          { 
                              ActivityDate = x.Key.LoginDateTime.ToShortDateString(),
                              Culture = x.Key.Culture, 
                              NumberOfTimesLoggedIn = x.Count()
                          })
                          .Take(1000).ToList();

GroupBy
仅此
DateTime
Date部分执行:
x.logindatime.Date
方法语法:

var result = _baseCommands.GetAll<UserActivity>()
                          .GroupBy(x => new { x.LoginDateTime, x.Culture})
                          .Select (x => new UserActivityResponseContract
                          { 
                              ActivityDate = x.Key.LoginDateTime.ToShortDateString(),
                              Culture = x.Key.Culture, 
                              NumberOfTimesLoggedIn = x.Count()
                          })
                          .Take(1000).ToList();


GroupBy
仅此
DateTime
部分的
DateTime
执行:
x.logindatime.Date

这是您真正想要的SQL吗?看起来您是按时间戳分组到毫秒,然后将ActivityDate设置为仅日期部分。@Sconibulus我只关心日期的日期部分,因为这是一个查询,我希望在其中按天查看活动。在这种情况下,您可能希望按日期而不是时间戳进行选择和分组。e、 g:选择CAST(LoginDatime作为日期),否则(取决于您的数据)可能会返回十几个不同的时间戳,每个日期/区域性配对的计数不同。这是您真正想要的SQL吗?看起来您是按时间戳分组到毫秒,然后将ActivityDate设置为仅日期部分。@Sconibulus我只关心日期的日期部分,因为这是一个查询,我希望在其中按天查看活动。在这种情况下,您可能希望按日期而不是时间戳进行选择和分组。e、 g:选择CAST(LoginDatime作为日期),否则您可能(根据您的数据)返回十几个不同的时间戳,每个日期/区域性配对的计数不同。