Как взять все элементы из IList <object>с индексом [0] LINQ - PullRequest
1 голос
/ 23 марта 2020

У меня есть 3 столбца в таблице Google, и я заполняю их и хочу исключить повторяющиеся электронные письма.

Как выбрать все значения из IList<object> с индексом 0 (имеет [0], [1] , [2] индексы, мне нужен только [0] индекс). row [0] .ToString () берет 1 электронное письмо с листов Google и проверяет его. но этот метод делает много запросов к Google API, и я не знаю, как принять все значение с 1 запроса

IList<IList<object>> values = response.Values;
if (values != null && values.Count > 0)
{   
    foreach (var row in values)
    {
        if (String.Equals(row[0].ToString(), email.Trim(), StringComparison.InvariantCultureIgnoreCase))
        {
            return false;
        }
    }
}

screen

1 Ответ

0 голосов
/ 23 марта 2020

Чтобы получить первый объект перечисления с помощью LINQ, используйте .First() или .FirstOrDefault(). Если вы хотите весь приведенный выше код в linq, он будет выглядеть следующим образом:

var trimmedEmail = email.Trim();
var result = !values.Any(
v => String.Equals(row.First().ToString(), trimmedEmail , StringComparison.InvariantCultureIgnoreCase));

Редактировать: должно быть any () , а не all ()

Т.е. если все значения в первом столбце равны trimmedEmail, result = true, в противном случае result = false.

Это, вероятно, не поможет с проблемами производительности, поскольку first() это концептуально эквивалентно row[0]. Это, однако, полностью зависит от реализации используемого вами IList. Поскольку вы упоминаете Google API, я бы предположил, что это не обычный System.Collections.Generic.List<T>.

Если ваша проблема заключается в количестве веб-звонков, то я бы предложил опубликовать новый вопрос, который конкретно задает вопрос о том, как уменьшить количество веб-вызовов, включая используемый API и указанные вами c звонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...