Вы можете изменить историю этой ветви функций и принудительно нажать ее, эффективно переписав последовательность коммитов на стороне удаленного репо.
Но, конечно, это не изменило бы потенциальные вытягивания / слияния, сделанные до этого второго толчка, поэтому связь была бы ключевой в дополнении исправления истории.
Вы не можете эффективно выбрать несколько агрегатов в ванильном LINQ к Объектам. Можно выполнить несколько запросов, конечно, но это может быть неэффективно в зависимости от источника данных.
У меня есть платформа, которая справляется с этим, которое я называю "Нажатие LINQ" - это - только хобби (для меня и Marc Gravell), но мы полагаем, что это работает вполне прилично. Это доступно как часть MiscUtil, и можно читать об этом в моем сообщении в блоге на нем.
Это выглядит немного нечетным - потому что Вы определяете, где Вы хотите, чтобы результаты пошли как "фьючерсы", затем продвиньте данные через запрос, затем получите результаты - но после того как Вы получаете голову вокруг него, это прекрасно. Мне было бы интересно слышать, как Вы продолжаете его - при использовании его отправьте мне по почте по skeet@pobox.com.
Единственное перечисление, приводящее и к минуте и макс. (и любой другой агрегат Вы хотите бросить там). Это намного легче в vb.net.
Я знаю, что это не обрабатывает пустой ящик. Это довольно легко добавить.
List<int> myInts = new List<int>() { 1, 4, 2, 0, 3 };
var y = myInts.Aggregate(
new { Min = int.MaxValue, Max = int.MinValue },
(a, i) =>
new
{
Min = (i < a.Min) ? i : a.Min,
Max = (a.Max < i) ? i : a.Max
});
Console.WriteLine("{0} {1}", y.Min, y.Max);
Можно делать несколько агрегатов с Linq-к объектам, но это немного уродливо.
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?))
}
);
Вам также потребуется минимальные и максимальные функции для DateTime, поскольку они не доступны стандарты.
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;
}