Подтвердить что ты не робот

Лучшие способы форматирования запросов LINQ

Перед тем, как вы проигнорируете/голосуете, чтобы закрыть этот вопрос, я считаю, что это правильный вопрос, потому что ясность кода является важной темой обсуждения, важно писать код поддерживаемого кода, и я бы очень хотел ценят ответы от тех, кто раньше сталкивался с этим.

Недавно я столкнулся с этой проблемой, запросы LINQ могут стать довольно неприятными из-за большого количества вложенности.

Ниже приведены некоторые примеры различий в форматировании, которые я придумал (для того же относительно не сложного запроса)

Нет форматирования

var allInventory = system.InventorySources.Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }).GroupBy(i => i.Region, i => i.Inventory);

Повышенное форматирование

var allInventory = system.InventorySources
    .Select(src => 
        new { 
            Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
            Region = src.Value.Region })
                .GroupBy(
                    i => i.Region, 
                    i => i.Inventory);

Форматирование блоков

var allInventory = system.InventorySources
    .Select(
        src => new 
        { 
            Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
            Region = src.Value.Region 
        })
        .GroupBy(
            i => i.Region, 
            i => i.Inventory
        );

Форматирование списка

var allInventory = system.InventorySources
    .Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region })
    .GroupBy(i => i.Region, i => i.Inventory);

Я хочу придумать стандарт для форматирования linq, чтобы он максимально читал и понимал и выглядел чистым и профессиональным. Пока я не могу решить, поэтому я передаю вопрос профессионалам.

4b9b3361

Ответ 1

Я установил форматирование блока. Это беспокоило мое чувство "потраченного впустую пространства" на некоторое время, но в конечном итоге все чувствовали, что его читают больше людей. Поскольку мы уже размещали фигурные скобки на новых строках, он просто лучше сочетался с остальной частью кода. Существует также меньше возможностей для интерпретации. Мы сохраняем файл cs в общедоступном хранилище с примерами форматирования... когда кто-то придумывает уникальный кусок linq, мы добавляем его в файл... действительно помогает новым парням.

Ответ 2

Мое форматирование:

var allInventory = system.InventorySources
  .Select(src => new
  {
    Inventory = src.Value.GetInventory(product.OriginalProductId, true),
    Region = src.Value.Region
  })
  .GroupBy(
    i => i.Region,
    i => i.Inventory
  );

Примечания:

  • Открытие парадов по методам никогда не стоит новой строки.
  • Закрывающие парны соответствуют отступу линии, содержащей открытый паз.
  • Новый src= > остается в той же строке, что и Select, потому что он просто не достоин новой строки.
  • Анонимный тип всегда получает блочную обработку, как если бы он использовался вне запроса (но закрывающий парен не достоин новой строки).
  • Два параметра GroupBy перегрузки обычно не вызываются. Хотя он может легко вписаться в одну строку, используйте дополнительную строку, чтобы было ясно, что происходит что-то необычное.

Ответ 3

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

Если я склонен иметь довольно сложный или более высокий оператор linq, я иду с форматированием блока, чтобы он облегчал чтение другим людям и выполнял то, что я пытался сделать.

Я не считаю, что плохая практика имеет разные форматы для разных операторов, если вы согласны с тем, как вы к ней подходите.

Ответ 4

Это очень субъективно.

Я использую метод форматирования блоков.

Я также проверяю код на Stylecop и удостоверяюсь, что он не дает предупреждения о стилевом стиле.