代码改变世界

LINQ统计

2013-01-29 22:00  yezhi  阅读(252)  评论(0编辑  收藏  举报
var _hardwarePerf = (from _stats in _statsList 
                    where _time>=DateTime.Parse("2012-04-04 00:00:00")
                        &&_time<=DateTime.Parse("2012-04-04 11:00:00") 
                    select new {
                           Latency = _stats.latency, 
                           CpuUsagePercent = _stats.cpuUsagePercent, 
                           MemoryUsagePercent = _stats.memoryUsagePercent, 
                           DiskUsage = _stats.diskUsage, DiskRead = _stats.diskRead, 
                           DiskWrite = _stats.diskWrite
                    }).Average(Latency => Latency.Latency);
var query = from _stats in _statsList 
    group _stats by new {
               Latency = _stats.latency, 
               CpuUsagePercent = _stats.cpuUsagePercent, 
               MemoryUsagePercent = _stats.memoryUsagePercent, 
               DiskUsage = _stats.diskUsage, 
               DiskRead = _stats.diskRead, 
               DiskWrite = _stats.diskWrite

    } into myGroup
    select new {
        AverageVal = myGroup.Average(x => x.Value),
        CpuUsagePercent = myGroup.Key.CpuUsagePercent,
        ... 
};
var averages =
    new
    {
        Latency = filteredStats.Average(x => x.Latency),
        CpuUsagePercent = filteredStats.Average(x => x.CpuUsagePercent),
        …
    };
var _hardwareAccumulator =
    _statsList
        .Where(s =>
            s.time >= DateTime.Parse("2012-04-04 00:00:00") &&
            s.time <= DateTime.Parse("2012-04-04 11:00:00"))
        .Aggregate(
            new
            {
                count = 0,
                cpuUsagePercent = 0.0,
                memoryUsagePercent = 0.0,
                diskUsage = 0.0,
                diskRead = 0.0
            },
            (acc, s) =>
                new
                {
                    count = acc.count + 1,
                    cpuUsagePercent =
                        acc.cpuUsagePercent + s.cpuUsagePercent,
                    memoryUsagePercent =
                        acc.memoryUsagePercent + s.memoryUsagePercent,
                    diskUsage =
                        acc.diskUsage + s.diskUsage,
                    diskRead =
                        acc.diskRead + s.diskRead
                }
            );
var _hardwarePerf = new
{
    cpuUsagePercent =
        _hardwareAccumulator.cpuUsagePercent / _hardwareAccumulator.count,
    memoryUsagePercent =
        _hardwareAccumulator.memoryUsagePercent / _hardwareAccumulator.count,
    diskUsage =
        _hardwareAccumulator.diskUsage / _hardwareAccumulator.count,
    diskRead =
        _hardwareAccumulator.diskRead / _hardwareAccumulator.count
};
var averages = statsList.Where(s => s.time >= new DateTime(2012, 4, 4) && s.time <= new DateTime(2012, 4, 04, 11, 0, 0))
            .GroupBy(s => 1)
            .Select(grp => new
            {
                Latency = grp.Average(s => s.latency),
                CpuUsagePercent = grp.Average(s => s.cpuUsagePercent),
                MemoryUsagePercent = grp.Average(s => s.memoryUsagePercent),
                DiskUsage = grp.Average(s => s.diskUsage),
                DiskRead = grp.Average(s => s.diskRead),
                DiskWrite = grp.Average(s => s.diskWrite)
            }).FirstOrDefault();

 

 

var newList = list.GroupBy(x => new {x.School, x.Friend, x.FavoriteColor})
                    .Select(y => new ConsolidatedChild()
                                        {
                                            FavoriteColor = y.Key.FavoriteColor,
                                            Friend = y.Key.Friend,
                                            School = y.Key.School,
                                            Children = y.ToList()
                                        }
                    );
var result = (from ls in list1
                  group ts by new {ls.Counter, ls.SrvID}
                order by ls.ID
                  select new{
                             ls.ID,
                             ls.Counter.FirstOrDefault(),
                             ls.SrvID.First,
                             ls.FirstName}).ToList()
list1.GroupBy(item => new { Counter = item.Counter, SrvID = item.SrvID })
     .Select(group => new { 
        ID = group.First().ID, 
        Counter = group.Key.Counter,
        SrvID = group.Key.SrvID,
        FirstName = group.First().FirstName})
     .OrderBy(item => item.ID);
var query =
  from record in list1
  group record by new {record.Counter, record.SrvID } into g
  let winner =
  (
    from groupedItem in g
    order by groupedItem.ID
    select groupedItem
  ).First()
  select winner;
var stats =
(
    from a in entities.Articles
    group a by a.UserId into g
    select new
    {
        UserId = g.Key,
        TotalPosts = g.Count(),
        LastUpdated = g.Max(i => i.DatePosted)
    }
);

var query =
(
    from u in entities.Users
    join s in stats on u.UserId equals s.UserId
    orderby u.Name 
    select new UserListing()
    {
        UserId = u.UserId,
        Name = u.Name,
        Email = u.Email,
        TotalPosts = s.TotalPosts,
        LastUpdated = s.LastUpdated
    }
);
var query =
(
    from u in entities.Users
    join s in stats on u.UserId equals s.UserId into g
    from a in g.DefaultIfEmpty()
    orderby u.Name 
    select new UserListing()
    {
        UserId = u.UserId,
        Name = u.Name,
        Email = u.Email,
        TotalPosts = a.TotalPosts,
        LastUpdated = a.LastUpdated
    }
);
var stats =
(
    from a in entities.Articles
    group a by a.UserId into g
    select new
    {
        UserId = g.Key,
        TotalPosts = (int?)g.Count(),
        LastUpdated = g.Max(i => i.DatePosted)
    }
);

var query =
(
    from u in entities.Users
    join s in stats on u.UserId equals s.UserId into joinedStats
    from s in joinedStats.DefaultIfEmpty() // do left outer join
    orderby u.Name 
    select new UserListing()
    {
        UserId = u.UserId,
        Name = u.Name,
        Email = u.Email,
        TotalPosts = s.TotalPosts,  // null if doesn't contain stats
        LastUpdated = s.LastUpdated // default DateTime if doesn't contain stats
    }
);

 

Func<DateTime, object> groupByClause;
if (groupByDay) groupByClause = date => date.Date;
else if (groupByMonth) groupByClause = date => new { date.Year, date.Month};
else throw new NotSupportedException("Some option should be chosen");

var result = data.Where(d => d.Type == "Deposit")
                 .GroupBy(groupByClause)
                 .Select(g => new { DateKey = g.Key,
                                    TotalDepositAmount = g.Sum(d => d.Amount),
                                    DepositCount = g.Count(),
                 });
var auta = from e in
                       (from a in DtPoruchy.FindAll()
                        where a.SERVIS >= 3
                        join p in MtAuta.FindAll() on a.MtAuta equals p.Id into ap
                        from ap2 in ap.DefaultIfEmpty()
                        select new
                        {
                            Cena = ap.cena,
                            IdAuta = a.MtAuta,
                            Servis = a.servis
                        })
                   group e by e.IdAuta into g
                   select new
                   {
                       Cena = g.Sum(e => e.cena),
                       IdAuta = g.Key,
                       Servis = g.Max(e => e.servis)
                   };
var auta = from jo in
                       (
                           from a in MtAuta.FindAll()
                           join p in DtPoruchy.FindAll() on a equals p.MtAuta into ap
                           from ap2 in ap.DefaultIfEmpty()
                           where ap2.SERVIS >= 3
                           select new
                           {
                               Cena = ap2.CENA,
                               Idauto = ap2.ID_AUTA,
                               Servis = ap2.SERVIS
                           }
                       )
                   group jo by jo.Idauto into g
                   select new
                   {
                       Cena = g.Sum(jo => jo.Cena),
                       IdAuto = g.Key,
                       Servis = g.Max(jo => jo.Servis)
                   };

 

WriteRankedList(from game in games
                group game by game.WinningPitcher into g
                orderby g.Count() descending
                select g);

WriteRankedList(games.GroupBy(g => g.WinningPitcher).
    OrderByDescending(g => g.Count()));

WriteRankedList(from game in games
                where game.Save != null
                group game by game.Save into g
                orderby g.Count() descending
                select g);

var battingAverageLeaders =
    from game in games
    from play in game.GetPlays()
    where play.Result != null
    group play by play.Batter into g
    where g.Count(p => p.Result.IsAtBat) > 400
    let pd = new PlayerData {
        Player = g.Key,
        Data = (Math.Round(1000.0d *
                           ((double)g.Count(p => p.Result.IsHit) /
                            (double)g.Count(p => p.Result.IsAtBat))) / 1000.0d).
                                ToString(".000") }
    orderby pd.Data descending
    select pd;


var battingAverageLeaders =
    games.SelectMany(g => g.GetPlays()).Where(p => p.Result != null).
    GroupBy(p => p.Batter).Where(g => g.Count(p => p.Result.IsAtBat) > 400).
    Select(g => new PlayerData {
               Player = g.Key,
               Data = (Math.Round(1000.0d *
                                  ((double)g.Count(p => p.Result.IsHit) /
                                   (double)g.Count(p => p.Result.IsAtBat))) / 1000.0d).
                                       ToString(".000")
           }).OrderByDescending(pd => pd.Data);


Func<Play, bool> obaPredicateTop =
    (p => p.Result.IsHit ||
          p.Result == PlayResult.Walk ||
          p.Result == PlayResult.IntentionalWalk ||
          p.Result == PlayResult.HitByPitch);

Func<Play, bool> obaPredicateBottom =
    (p => p.Result.IsAtBat ||
          p.Result == PlayResult.Walk ||
          p.Result == PlayResult.IntentionalWalk ||
          p.Result == PlayResult.HitByPitch ||
          p.Result == PlayResult.SacrificeFly);

var onBaseAverage =
    from game in games
    from play in game.GetPlays()
    where play.Result != null
    group play by play.Batter into g
    where g.Count() > 400
    let pd = new PlayerData {
        Player = g.Key,
        Data = (Math.Round(1000.0d *
                ((double)g.Count(obaPredicateTop) /
                 (double)g.Count(obaPredicateBottom))) / 1000.0d).
                     ToString(".000") }
    orderby pd.Data descending
    select pd;