Пустая последовательность в LINQ

Нет никаких гарантий порядка оценки. Оптимизатор попытается найти самый эффективный способ выполнить запрос, с помощью доступной информации.

В Вашем случае, так как c индексируется, и d не, оптимизатор должен изучить индекс для нахождения всех строк, которые соответствуют предикату на c, затем получают те строки от данных таблицы для оценки предиката на d.

Однако, если это решает, что индекс на c не является очень выборочным (хотя не в Вашем примере, гендерный столбец редко полезно индексируется), он может решить сделать сканирование таблицы так или иначе.

Для определения порядка выполнения необходимо получить объяснить план относительно запроса. Однако поймите, что тот план может измениться в зависимости от того, что думает оптимизатор, лучший запрос прямо сейчас.

9
задан 22 October 2009 в 20:14
поделиться

2 ответа

You can use this when you want to quickly create an IEnumerable this way you don't have to create a reference to a new List and take advantage of the yield keyword.

List<string[]> namesList =
    new List<string[]> { names1, names2, names3 };

// Only include arrays that have four or more elements
IEnumerable<string> allNames =
    namesList.Aggregate(Enumerable.Empty<string>(),
    (current, next) => next.Length > 3 ? current.Union(next) : current);

Note the use of Union because it is not a List you can not call Add method, but you could call Union on an IEnumerable

3
ответ дан 4 December 2019 в 23:06
поделиться

Если у вас есть цикл, который объединяет различные наборы в набор результатов, вы можете использовать его для инициализации переменной набора результатов и цикла / накопления. Например:

IEnumerable<string> results = Enumerable.Empty<string>();

for(....)
{
    IEnumerable<string> subset = GetSomeSubset(...);

    results = results.Union(subset);
}

Без Empty вам пришлось бы прописать проверку на null в логику цикла:

IEnumerable<string> results = null;

for(....)
{
    IEnumerable<string> subset = GetSomeSubset(...);

    if(results == null)
    {
        results = subset;
    }
    else
    {
        results = results.Union(subset);
    }
}

Это не просто должен быть сценарий цикла и не обязательно должен быть Union (может быть любой агрегатная функция), но это один из наиболее распространенных примеров.

4
ответ дан 4 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: