Frank
Frank

Reputation: 21

Match data from two list<T> where date from one list falls between dates from second list

I have a list of objects (Pulled from SQL DB) with a TransactionDate for each object “alarmHistoryList”.

I have another list of objects (Pulled from SQL DB) and each object has a StartDate a FinishDate and an ID “RunLogList”.

There will be a Many to One relationship where “List1” will be the many and “RunLogList” the one. Each Run may have many Alarms.

I want every object in “alarmHistoryList” returned with the ID of the object in “RunLogList” where the TransactionDate fall between the StartDate and the FinishDate.

private void MatchRunData()
{
    foreach (var alarm in _alarmHistoryList)
    {
        var AlarmTransTime = alarm.TransactionTime;
        var filteredData = _FARunLogList.Where(t => 
            t.TrackInTime > AlarmTransTime && t.TrackOutTime < AlarmTransTime);
    }
}

Upvotes: 0

Views: 50

Answers (3)

Martin Zaloga
Martin Zaloga

Reputation: 125

Can try this

private void MatchRunData() { foreach (var alarm in _alarmHistoryList) { var filteredData = _FARunLogList.Where(t => t.TrackInTime > alarm.TransactionTime && t.TrackOutTime < alarm.TransactionTime); alarm.RunLogListId = filteredData.RunLogListId; } }

Upvotes: 0

Frank
Frank

Reputation: 21

I came up with an answer before Prolog that works. I am sure the answer Prolog gave works as well and is cleaner but I am posting my answer since it is the one I will be using.

private void MatchRunData()
{
    foreach (var alarm in _alarmHistoryList)
    {
        var AlarmTransTime = alarm.TransactionTime;
        foreach (var run in _FARunLogList)
        {
            var TrackInTime = run.TrackInTime;
            var TrackOutTime = run.TrackOutTime;
            var ID = run.LogId;
            if (AlarmTransTime > TrackInTime && AlarmTransTime < TrackOutTime)
            {
                _MergedalarmHistoryList.Add
                    (new AlarmHistoryDefinition() 
                    { AlarmDesc = alarm.AlarmDesc, AlarmID = alarm.AlarmID, ToolID = alarm.ToolID, 
                        TransactionTime = alarm.TransactionTime, GlobalToolID = alarm.GlobalToolID, 
                        RUnLogID = run.LogId });
            }
        }
        _MergedalarmHistoryList.Add(new AlarmHistoryDefinition() 
            { AlarmDesc = alarm.AlarmDesc, AlarmID = alarm.AlarmID, ToolID = alarm.ToolID, 
                TransactionTime = alarm.TransactionTime, GlobalToolID = alarm.GlobalToolID, 
                RUnLogID = 00000 });
    }
}

Upvotes: 0

Prolog
Prolog

Reputation: 3364

Run logs with alarms matching the run log time window:

var runLogAlarms = new Dictionary<RunLog, IList<Alarm>>();

foreach (var alarm in _alarmHistoryList)
{
    var alarmTransTime = alarm.TransactionTime;
    var filteredData = _FARunLogList
        .Where(t => t.TrackInTime > alarmTransTime && t.TrackOutTime < alarmTransTime)
        .ToList();

    foreach (var runLog in filteredData)
    {
        if (runLogAlarms.TryGetValue(runLog, out var alarmsValue))
        {
            alarmsValue.Add(alarm);
        }
        else
        {
            runLogAlarms[runLog] = new List<Alarm> { alarm };
        }
    }
}

Upvotes: 1

Related Questions