LINQ Nesneler ile birden agrega yapmak mümkündür, ama biraz çirkin. bu mevcut standart olmadığından
var times = punches.Aggregate(
new { EarliestIn = default(DateTime?), LatestOut = default(DateTime?) },
(agg, p) => new {
EarliestIn = Min(
agg.EarliestIn,
p.type == "In" ? (DateTime?)p.PunchTime : default(DateTime?)),
LatestOut = Max(
agg.LatestOut,
p.type == "Out" ? (DateTime?)p.PunchTime : default(DateTime?))
}
);
Ayrıca DateTime Min ve Max işlevlerini gerekir.
public static DateTime? Max(DateTime? d1, DateTime? d2)
{
if (!d1.HasValue)
return d2;
if (!d2.HasValue)
return d1;
return d1.Value > d2.Value ? d1 : d2;
}
public static DateTime? Min(DateTime? d1, DateTime? d2)
{
if (!d1.HasValue)
return d2;
if (!d2.HasValue)
return d1;
return d1.Value < d2.Value ? d1 : d2;
}
Teşekkür Jon. Linq ile ilgili en zor kısımlardan biri, ne yapabileceğinizi ve yapamayacağınızı anlamaya çalışmaktır. Standart metodolojiyle biraz daha rahat edersem kesinlikle Push tekniğinize bir göz atacağım. –