Страницы

Поиск по вопросам

вторник, 26 февраля 2019 г.

Linq Group VS Join+Into

Подскажите пожалуйста в чем преимущество использования в Linq запросе комбинации Join+Into перед group. Что один, что второй используются для группировки сходных по определенных критериев объектов в массив. Однако зачем использовать Join+Into если, все сортировочные критерии есть и так в нужном массиве. Например есть две последовательности:
List type = new List() { 1,2,3,4 }; List classes = new List() { new Tov(4, "Велосипед"), new Tov(1, "Автомобиль"), new Tov(2, "Катер"), new Tov(4, "Мопед"), new Tov(3, "Самолет"), new Tov(2, "Лодка"), new Tov(1, "Самосвал"), new Tov(4, "Самокат"), new Tov(2, "Корабль"), };
В чем преимущество, например этого запроса
var v = from t in classes group t by t.id;
От этого :
var v = from t in type join cl in classes on t equals cl.id into Mass select new { Type = t, Mass };
Ведь в результате мы все равно как в первом так и во втором случае получим набор из массивов где объекты определены по одному признаку. И есть ли такой пример, где невозможно воспользоваться одним способом, зато можно другим ? Спасибо.


Ответ

Group by - это аггрегация данных, т.е. результат будет содержать столько же или меньше (в случае повтороения значений) строк. Join - это содениение данных, т.е. результат будет содержать столько же и никак не меньше строк.
Если в список type будут повторяющиеся значения, то результат второго запроса поменяется. Для такого списка:
var type = new List() { 1, 2, 3, 4, 3 , 2, 1 };
Второй запрос вернет семь строк, а не 4 как первый.
DotNetFiddle пример

В другом случае, когда не для каждого значения id из списка type будут существовать соответствующие значения в списке classes - во втором запросе, для каждого такого значения id из списка type вернется пустой список значений из classes.
DotNetFiddle пример

Комментариев нет:

Отправить комментарий