Как написать соединение с предложением составного ключа в выражениях запроса FSharp?

Как написать это соединение С# с предложением составного ключа в F#? :

join k in DataContext.Catalogs on
   new { id = o.IDENT, v = o.VZ } equals
   new { id = k.IDENT, v = k.VZ }

Это аналогичный вопрос: группировать по нескольким столбцам в запросе F# 3.0 на который до сих пор нет ответа. Но я не могу поверить, что это непросто написать в FSharp.

Спасибо


person tomasK    schedule 14.09.2012    source источник


Ответы (1)


Используйте кортежи, содержащие нужные вам ключевые поля:

query {
  for o in DataContext.OTable do
  join k in DataContext.Catalogs on
   ((o.IDENT, o.VZ) = (k.IDENT, k.VZ))
  select (o.IDENT, k.VZ)
}

Обратите внимание, что в F# нельзя создать анонимный тип с именованными полями, как в C#. Кортежи, вероятно, являются наиболее близким и наиболее идиоматичным переводом. См. ответ Томаса здесь.

person latkin    schedule 14.09.2012