0

現在、ユーザーのサインイン回数、サインアウト回数などのユーザーアクティビティ統計を計算するために、以下のクエリを使用しています...正常に動作しています。しかし、以下のオブジェクトを1回だけ作成してコードを改善し、コードのUserActivityStatistics重複を避け、以下のようにオブジェクトを2回作成したいと考えています。

    private IList<UserActivityStatistics> ToUserActivityStatistics(DateTime fromDate, DateTime toDate, int pageIndex, int pageSize, Guid userId, ActivityType activity)
    {
        IList<UserActivityStatistics> userActivityStatistics = null;

        if (userId == null || userId == Guid.Empty)
        {
            userActivityStatistics = (from u in SqlGetUserActivityStatistics(fromDate, toDate, userId, activity)
                                      group u by new { u.Activity, u.UserId } into g
                                      select g).AsEnumerable().Select(x => new UserActivityStatistics
                                      {
                                          Activity = Activity.GetActivityTypeName((ActivityType)x.Key.Activity),
                                          ActivityCount = x.Count(),
                                          UserId = x.Key.UserId,
                                          UserName = x.Select(y => y.aspnet_Users.UserProfiles.FirstName + " " + y.aspnet_Users.UserProfiles.LastName).FirstOrDefault()

                                      }).OrderByDescending(y => y.ActivityCount).Skip(pageIndex).Take(pageSize).ToList();
        }
        else
        {

            userActivityStatistics = (from u in SqlGetUserActivityStatistics(fromDate, toDate, userId, activity)
                                      group u by u.Activity into g
                                      select g).AsEnumerable().Select(x => new UserActivityStatistics
                                      {
                                          Activity = Activity.GetActivityTypeName((ActivityType)x.Key),
                                          ActivityCount = x.Count(),
                                          UserId = x.Select(y => y.aspnet_Users.UserProfiles.UserId).FirstOrDefault(),
                                          UserName = x.Select(y => y.aspnet_Users.UserProfiles.FirstName + " " + y.aspnet_Users.UserProfiles.LastName).FirstOrDefault()
                                      }).OrderByDescending(z => z.ActivityCount).Skip(pageIndex).Take(pageSize).ToList();

        }

        return userActivityStatistics;
    }

UserActivityStatisticsオブジェクトを外側に移動し、queryable としてグループ化するという点で、以下のようなコードを改善しています。しかし、その照会可能なオブジェクトからカウントを計算できません。インターネットで検索しましたが、解決策がありませんでした。

その明確なことを願っています...

    private IList<UserActivityStatistics> ToUserActivityStatistics(DateTime fromDate, DateTime toDate, int pageIndex, int pageSize, Guid userId, ActivityType activity)
    {
        IList<UserActivityStatistics> userActivityStatistics = null;
        IQueryable<ActivityLog> activityLog = null;

        if (userId == null || userId == Guid.Empty)
        {

            activityLog = (from u in SqlGetUserActivityStatistics(fromDate, toDate, userId, activity)
                            select u).GroupBy(x => new { x.Activity, x.UserId }).SelectMany(x => x);


        }
        else
        {
            activityLog = (from u in SqlGetUserActivityStatistics(fromDate, toDate, userId, activity)
                            select u).GroupBy(x => new { x.Activity}).SelectMany(x => x);
        }


        userActivityStatistics = (from u in activityLog
                                  select u).AsEnumerable().Select(x => new UserActivityStatistics
                                 {
                                     Activity = Activity.GetActivityTypeName((ActivityType)x.Activity),
                                     ActivityCount = //unable to do count
                                     UserId = x.UserId
                                 }).OrderByDescending(x => x.ActivityCount).Skip(pageIndex).Take(pageSize).ToList();


        return userActivityStatistics;
    }
4

0 に答える 0