1

すでに設定したグラフにバインドするために、2つのクラスを日付プロパティの3分の1にマージしようとしています。

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にアクセスできるようにするにはどうすればよいですか、または同じ結果を達成するためのより良いステートメントは何ですか?

助けてくれてありがとう。

4

1 に答える 1

5

日付ごとにコレクションに参加するためにjoinを使用することはありません(正しいプロパティを取得したかどうかはわかりませんが、アイデアは得られました)。

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
        }
于 2012-12-19T22:37:56.943 に答える