私は次のようなクラスを持っています:
public class LogDataRow
{
public DateTime TheInterval { get; set; }
public ICollection<LogPreviousCurrent> PreviousCurrentItems { get; set; }
}
これらのコレクションが含まれています:
public class LogPreviousCurrent : INotifyPropertyChanged
{
public string Name { get; set; }
private decimal? previous;
public decimal? Previous
{
get { return previous; }
set
{
previous = value;
PropertyNotification.Notify(this, PropertyChanged, PreviousProperty);
}
}
private const string PreviousProperty = "PreviousProperty";
private decimal? current;
public decimal? Current
{
get { return current; }
set
{
current = value;
PropertyNotification.Notify(this, PropertyChanged, CurrentProperty);
}
}
public const string CurrentProperty = "CurrentProperty";
}
for ループを使用して、それぞれ 10 個の LogPreviousCurrent アイテムを含む LogDataRow のコレクションを作成します。各 LogPreviousCurrent には Name プロパティがあります。
for ループの例を次に示します。
var logDataRows = new List<LogDataRow>();
// loop through for each interval (always 24)
for (int i = 1; i <= 24; i++)
{
// create a new logdatarow and intialise with the interval
var dataRow = new logDataRow
{
Interval = new Interval(customDateObject.TheDate, i)
};
// loop thorugh all the types (these equal columns in the destination grid)
foreach (var type in customTypes)
{
// initialise a new preiovuscurrent object
var previousCurrent = new LogPreviousCurrent
{
Name = type.Value.Name
};
DetailObject latestDetails = null;
DetailObject previousDetails = null;
if (latest.Details.ContainsKey(type.Key))
{
latestDetails = latest.Details[type.Key];
}
if (previous.Details.ContainsKey(type.Key))
{
previousDetails = previous.Details[type.Key];
}
// get the latest/previous interval value for each details object
var latestIntervalValue = latestDetails == null ? null : latestDetails.Details[i];
var previousIntervalValue = previousDetails == null ? null : previousDetails.Details[i];
// if there is a difference in the data
if (latestIntervalValue != previousIntervalValue)
{
previousCurrent.Previous = previousIntervalValue;
previousCurrent.Current = latestIntervalValue;
}
else
{
// no difference so set both to null
previousCurrent.Previous = null;
previousCurrent.Current = null;
}
dataRow.PreviousCurrentItems.Add(previousCurrent);
}
// only add rows that contain differences
if (dataRow.PreviousCurrentItems.Any(a => a.Previous != a.Current))
{
logDataRows.Add(dataRow);
}
}
このループの最後に、LogPreviousCurrent の違いを含む行 (dataRow) のみのコレクションになります。
今私がやりたいことは、列についても同じです。つまり、特定の Name プロパティのすべての LogPreviousCurrent に違いが含まれていない場合、それらの LogPreviousCurrent オブジェクトは logDataRows コレクションに存在しないはずです。
したがって、本質的に最後に、LogPreviousCurrent アイテムのみを含むコレクションを返し、Previous プロパティと Current プロパティの違いを返したいと考えています。
Linq を使用してこれを実行しようとしましたが、これまでのところ成功していません。
これが理にかなっていると思いますか?