Как Компилятор C# выбирает SelectMany при переводе выражения LINQ?

Мутация для создания задачи имеет следующую форму:

mutation b {
  createTask(
    data: {
      content: "Task1"
      completed: false
      dateToDo: { connect: { id: "cjqzjvk6w000e0999a75mzwpx" } }
    }
  ) {
    id
  }
}

Тип DayCreateOneWithoutTasksInput, который запрашивает Prisma, генерируется автоматически и является ожидаемым для поля dataToDo. Имя означает, что Prisma будет принимать тип, который создает один Day узел, но не имеет полевых задач, или тип, который определяет соединение. Часть состояния WithoutTasksInput существует, потому что тип может использоваться только во вложенной мутации, когда вы начинаете с задачи, поэтому Prisma уже имеет значение для заполнения поля задач на вложенном узле Day, а вы нужно указать его, если вы создаете день вместо того, чтобы подключить существующий.

Если вы используете игровую площадку, вы можете исследовать схему, которая содержит все типы справа.

Исследователь схем на игровой площадке

Надеюсь, это поможет!

9
задан Morgan Cheng 8 January 2009 в 01:56
поделиться

2 ответа

Согласно Спецификации C#, компилятор не генерирует вызов перегрузки к первой версии SelectMany. Первая версия SelectMany полезна для выравнивания Списка Списков в единственный плоский список.

public IEnumerable<string> Example(IEnumerable<IEnumerable<string>> enumerable) {
  return enumerable.SelectMany(x => x);
}

Это не имеет сильного эквивалента в выражении запроса.

Посмотрите Раздел 7.15.2 из Спецификации Языка C# для получения дополнительной информации.

5
ответ дан 4 December 2019 в 21:13
поделиться

почему у нас есть 2 подписи SelectMany?

Таким образом, я могу использовать первый в своем коде.

var orders = Customers.SelectMany(c => c.Orders)
5
ответ дан 4 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

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