2012-12-19 30 views
1

我想在日期属性中合并2个类到第三个类,以便绑定到我已经设置好的图。Linq将两个类合并成第三个类?

public class Last30DaysHours 
{ 
    public DateTime Date { get; set; } 
    public float Hours { get; set; } 
    public float LostHours { get; set; } 
} 

public class MachineHours 
{ 
    public DateTime Date { get; set; } 
    public float Hours { get; set; } 
} 

public class GraphLast30Days 
{ 
    public DateTime Date { get; set; } 
    public float Hours { get; set; } 
    public float LostHours { get; set; } 
    public float SelectedMachine { get; set; } 
} 

到目前为止,我有几乎编译此LINQ语句。 当前语句的错误是“'x'在当前语境中不存在”。

我知道这是什么意思,但我不知道如何使它在声明中可访问。

IEnumerable<GraphLast30Days> last30DaysMachineHoursSelect = _last30DaysMachineHours 
      .Select(p => (_last30Days 
          .Where(x => x.Date == p.Date) <= 
          (new GraphLast30Days { 
                Date = x.Date, 
                Hours = x.Hours, 
                LostHours = x.LostHours, 
                SelectedMachine = p.Hours 
                })));    

我的问题是如何在声明的后半部分使x可访问,或者为了达到相同的结果,更好的声明是什么?

感谢您的帮助。

回答

5

你会惯于使用加入日期(不知道我得到了正确的proeprties,但你有这个想法)加入您的收藏:

IEnumerable<GraphLast30Days> last30DaysMachineHoursSelect = 
     from machineHours in _last30DaysMachineHours 
     join last30 in _last30Days on machineHours.Date equals last30.Date 
     select 
     new GraphLast30Days { 
      Date = machineHours.Date, 
      Hours = machineHours.Hours, 
      LostHours = last30.LostHours, 
      SelectedMachine = machineHours.Hours 
      }; 

或用替代语法:

var result = _last30DaysMachineHours.Join(_last30Days, graph => graph.Date, last30 => last30.Date, 
              (graph, last30) => new GraphLast30Days 
                   { 
                     Date   = graph.Date, 
                     Hours   = graph.Hours, 
                     LostHours  = last30.LostHours, 
                     SelectedMachine = graph.Hours 
                   }); 

如果你不惯于筛选出遗漏值你需要做的左侧加入:

IEnumerable<GraphLast30Days> last30DaysMachineHoursSelect = 
    from last30 in _last30Days 
    from machineHours in _last30DaysMachineHours.Where (h => h.Date == last30.Date).DefaultIfEmpty() 
    select 
    new GraphLast30Days { 
     Date = last30.Date, 
     Hours = last30.Hours, 
     LostHours = last30.LostHours, 
     SelectedMachine = machineHours == null ? 0 : machineHours.Hours 
     } 
+0

看起来是我所追求的,只是测试它现在:)只是出于好奇心,你将如何使用我正在使用的LINQ样式?例如select(x => x.Date)? – Anthbs

+1

查看更新后的文章:) –

+0

好吧,它非常接近我后,但加入是不是我所需要的。 _Last30Days收藏始终包含30条记录,但_last30DaysMachineHours没有收录,这意味着_Last30Days的大部分数据都会下降,而我目前的数据只绘制了4个点。希望我已经解释了这一点,在sql中,我认为我所追求的是_last30Days的左连接? – Anthbs

相关问题