В текущей версии поддержка LINQ в F # не так гладка, как в C #, но ее можно использовать довольно хорошо. Я использовал F # + LINQ to SQL при реализации F # Snippets Web и смог написать почти все, используя F #. Есть даже несколько приятных функций, которые вы не получите в C #.
Синтаксис для базовых запросов основан на выражениях в кавычках:
let q = <@ seq { for c in db.Customers do
if c.Country = "UK" then yield c.Name } @>
Хорошая вещь в F # заключается в том, что вы можете использовать объединение цитат для рефакторинга вашего кода:
let ukCustomers =
<@ seq { for c in db.Customers do
if c.Country = "OK" then yield c } @>
// Select names of all UK customers
let q = <@ seq { for c in %ukCustomers -> c.Name }
Относительно ограничений поддержки F #:
Я не думаю, что есть какие-либо проблемы с обновлениями (как подразумевается в связанном вопросе).
Возможно, самым большим ограничением текущей версии является ограниченная поддержка вложенности запросов (например, использование Seq.filter
внутри тела цикла for
), но это должно быть исправлено в следующей версии PowerPack (на самом деле, если вы скомпилируете его из исходного кода, вы можете получить его уже)
Если вы можете выбрать, я бы рекомендовал использовать LINQ to SQL вместо LINQ to Entities. LINQ to Entities не очень хорошо работает с неизменяемыми типами, поэтому вы не можете легко возвращать записи F # и кортежи F #. Опять же, это, вероятно, улучшится в будущем (я недавно поработал над этим, и вы можете найти первоначальную поддержку в источниках F # PowerPack)