День сто семьдесят пятый. #BestPractices
Когда использовать LINQ с синтаксисом запроса вместо методов. Продолжение
3. Несколько источников данных
Если у вас есть несколько источников данных для запроса, синтаксис запроса будет предпочтительнее. Причина в том, что вы можете использовать ключевое слово from несколько раз. Например:
4. GroupBy или group
Метод расширения GroupBy очень похож на group в запросе. Например:
5. Объединения
Как правило, всякий раз, когда вам нужно объединить коллекции, синтаксис запроса будет более читаемым. Вот внутреннее объединение, например:
Замечание: как и в большинстве руководств по стилю кодирования, вышеизложенное является сугубо личным мнением.
Источник: https://michaelscodingspot.com/
Когда использовать LINQ с синтаксисом запроса вместо методов. Продолжение
3. Несколько источников данных
Если у вас есть несколько источников данных для запроса, синтаксис запроса будет предпочтительнее. Причина в том, что вы можете использовать ключевое слово from несколько раз. Например:
var rows = Enumerable.Range(1, 3); //1,2,3Цель здесь - получить коллекцию со всеми возможными комбинациями из 2 источников. С синтаксисом запроса код прост и не требует пояснений. А синтаксис методов вовсе не так очевиден для понимания.
var columns = new string[] { "A", "B"};
var querySyntax = from row in rows
from col in columns
select $"cell [{row}, {col}]";
var methodSyntax =
rows.SelectMany(row => columns, (r, c) => $"cell [{r}, {c}]");
foreach (var cell in methodSyntax)
{
Console.WriteLine(cell);
}
//Вывод:
//cell[1, A]
//cell[1, B]
//cell[2, A]
//cell[2, B]
//cell[3, A]
//cell[3, B]
4. GroupBy или group
Метод расширения GroupBy очень похож на group в запросе. Например:
var names = new string[] { "Alex", "George", "Alfredo", "Bo", "Greg", "Maxim" };Опять же, синтаксис методов не совсем ясен. Что означает второй параметр? Конечно, если немного подумать, смысл становится понятен. Но я не хочу думать, когда я смотрю на код, я хочу читать его как книгу. Детскую книгу, если это возможно.
var querySyntax = from name in names
group name by name[0];
var methodSyntax = names
.GroupBy(name => name[0], name => name);
foreach (var pair in querySyntax)
{
var names1 = string.Join(", ", pair.ToList());
Console.WriteLine($"Key = {pair.Key} Names = {names1}");
}
//Вывод:
//Key = A Names = Alex, Alfredo
//Key = G Names = George, Greg
//Key = B Names = Bo
//Key = M Names = Maxim
5. Объединения
Как правило, всякий раз, когда вам нужно объединить коллекции, синтаксис запроса будет более читаемым. Вот внутреннее объединение, например:
var categories = new Category[]В синтаксисе методов сравниваются 2-й и 3-й параметры объединения. Но в отличие от синтаксиса запроса, это не совсем понятно из кода. В синтаксисе запросов это намного понятнее.
{
new Category() {Name="Игрушки", ID=1},
new Category() {Name="Приборы", ID=2}
};
var products = new Product[]
{
new Product(){Name="Кукла", CategoryID=1},
new Product(){Name="Блендер", CategoryID=2},
new Product(){Name="Утюг", CategoryID=2},
new Product(){Name="Медведь", CategoryID=1}
};
var querySyntax =
from category in categories
join prod in products on category.ID equals prod.CategoryID
select new { ProductName = prod.Name, Category = category.Name };
var methodSyntax = categories.Join(products,
category => category.ID,
prod => prod.CategoryID,
(category, prod) => new {ProductName = prod.Name, Category = category.Name});
Замечание: как и в большинстве руководств по стилю кодирования, вышеизложенное является сугубо личным мнением.
Источник: https://michaelscodingspot.com/