选择连接中的多个字段

问题描述 投票:0回答:1

我正在尝试按magnitudId分组,并返回一个包含字段MagnitudID,CalibracionID和MaxDate的匿名类型,然后通过calibracionVerificacionId加入,但在linq以下查询不起作用:

   (from c in equipo.CalibracionVerificacion
    join c2 in
        (from c3 in equipo.CalibracionVerificacion
         where c3.equipoId == equipo.equipoId && !(c3.magnitudId == null || c3.magnitudId.Trim() == string.Empty)
         group c3 by c3.magnitudId into cgroup
         select new
         {
             MagnitudID = cgroup.Key,
             CalibracionID = cgroup.Select(x => x.calibracionVerificacionId),
             MaxDate = cgroup.Max(x => x.fechaPrevista),
         }
        ) on c.calibracionVerificacionId equals c2.CalibracionID
    where c.equipoId == equipo.equipoId
    select c).Min(d => d.fechaPrevista);
c# linq join
1个回答
0
投票

不清楚您在问什么。看起来您正在加入相同的列表,然后分组,然后选择最大日期的最小值?

如果是这样,也许这对您有用:

void Main()
{
    var CalibracionVerificacion = new List<Equipo>();

    var results = CalibracionVerificacion       
        .Join(
            CalibracionVerificacion.Where(x => !String.IsNullOrWhiteSpace(x.magnitudId)), 
            c1 => c1.equipoId, 
            c2 => c2.equipoId, 
            (c1, c2) => new {c1, c2})
        .GroupBy(x => x.c2.magnitudId)
        .Select(g => new
        {
            MagnitudID = g.Key,
            CalibracionID = g.Select(x => x.c1.calibracionVerificacionId),
            MaxDate = g.Max(x => x.c1.fechaPrevista)
        })
        .Min(g => g.MaxDate);   

}

class Equipo {
    public int equipoId  { get; set; }
    public string magnitudId  { get; set; }
    public int calibracionVerificacionId { get; set; }
    public int fechaPrevista  { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.