Теперь как метод расширения:
public static class LinqExt
{
public static IEnumerable<TResult> LeftOuterJoin<TLeft, TRight, TKey, TResult>(this IEnumerable<TLeft> left, IEnumerable<TRight> right, Func<TLeft, TKey> leftKey, Func<TRight, TKey> rightKey,
Func<TLeft, TRight, TResult> result)
{
return left.GroupJoin(right, leftKey, rightKey, (l, r) => new { l, r })
.SelectMany(
o => o.r.DefaultIfEmpty(),
(l, r) => new { lft= l.l, rght = r })
.Select(o => result.Invoke(o.lft, o.rght));
}
}
Используйте, как обычно, вы используете join:
var contents = list.LeftOuterJoin(list2,
l => l.country,
r => r.name,
(l, r) => new { count = l.Count(), l.country, l.reason, r.people })
Надеемся, что это сэкономит вам некоторое время.
Ваша текущая настройка, в которой у вас есть записи, охватывающие несколько листов, неэффективна с точки зрения запроса и будет трудно поддерживать, поскольку данные масштабируются.
Я бы переместил все эти данные в настоящую базу данных ( облако Google имеет несколько вариантов хранения ), а затем использует скрипт Apps для запроса указанной базы данных с использованием диапазона дат и заполнения лист с результатами.
Google Таблицы - жизнеспособное решение для хранения относительно небольших нереляционных наборов данных. Но по мере того, как вы расширяетесь и вы хотите выполнять более сложные запросы, его ограничения становятся более очевидными. Они все еще могут служить платформой для отображения результатов запроса, но в отношении хранилища, которое необходимо масштабировать, я бы рекомендовал разгрузить это для правильного решения базы данных.