从Linq GroupJoin输出匿名类型

时间:2016-03-16 23:28:35

标签: c# linq

我正在尝试从LINQ中的GroupJoin输出匿名类型,但是一个查询起作用而另一个查询不起作用。

唯一的区别是在第一个查询中,起始service是一个内存IGrouping(来自之前调用GroupBy的成员),而不是直接数据库查询。

我得到的错误是

  

错误8方法'System.Linq.Enumerable.GroupJoin的类型参数(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func,System.Func,System.Func,TResult>) '无法从使用中推断出来。尝试显式指定类型参数。 C:\ Users \ wbutt \ Documents \ Visual Studio 2013 \ Projects \ ServiceGraphMonitor \ Controllers \ ServiceQueueController.cs 148 30 ServiceGraphMonitor

这是不起作用的查询:

var result = index.GroupJoin(service.GroupBy(
    s => new
    {
        h = s.orig_que_dt.Hour,
        s = s.orig_que_dt.Minute / 15
    }
    ), i => i, s => s.Key,
    (i, s) => new
    {
        x = new DateTime(start_date.Year, start_date.Month, start_date.Day, i.h, i.m * 15, 0),
        y = s.Count()
    }
);

这个有效:

var result = index.GroupJoin(db.t_svc_task_sta.Where(ts =>
    ts.t_svc_task.orig_que_dt > start_date &&
    ts.t_svc_task.orig_que_dt < end_date
    ).GroupBy(ts => new
    {
        h = ts.t_svc_task.orig_que_dt.Hour,
        m = ts.t_svc_task.orig_que_dt.Minute / 15
    }
    ), i => i, ts => ts.Key,
    (i, ts) => new // DTO.ServiceReport()
    {
        time = new DateTime(start_date.Year, start_date.Month, start_date.Day, i.h, i.m * 15, 0).ToUniversalTime(),
        queue_time = ts.Sum(t => t.Where(x => x.svc_task_sta_cd == 1 && x.sta_end_dt <= DateTime.Now).DefaultIfEmpty(new t_svc_task_sta() {sta_start_dt = DateTime.Today, sta_end_dt = DateTime.Today }).Average(x => (x.sta_end_dt - x.sta_start_dt).TotalSeconds)),
        exec_time = ts.Sum(t => t.Where(x => x.svc_task_sta_cd == 2 && x.sta_end_dt <= DateTime.Now).DefaultIfEmpty(new t_svc_task_sta() {sta_start_dt = DateTime.Today, sta_end_dt = DateTime.Today }).Average(x => (x.sta_end_dt - x.sta_start_dt).TotalSeconds)),
        volume = ts.Sum(t => t.Count(x => x.svc_task_sta_cd == 1))
    }
);

0 个答案:

没有答案