Параметрический запрос LINQ

Это еще один способ доступа к динамическим объектам в F# Там я использую let y = x.Where(fun x -> x.City ="London").Select("new(City,Zip)") параметризовать запрос и извлечь необходимые элементы. Они будут соответствовать столбцам в запросе SQL и будут представлены свойством текстового текста. Это та часть, которую я хотел бы передать в качестве параметра.

type Northwind = ODataService<"http://services.odata.org/Northwind/Northwind.svc">
let db = Northwind.GetDataContext()
let query2 = query { for customer in db.Customers do
                     select customer}  |> Seq.toArray
let qryfun (x:Northwind.ServiceTypes.Customer) =
    query { for x in query2 do
            select (x.City,x.CompanyName,x.Country)}

В основном я хотел бы пройти не только x но также x.*, Поскольку я обращаюсь к одной фиксированной базе данных, я могу выделить x. Однако теперь у меня есть 40 небольших функций, извлекающих различные столбцы. Можно ли выделить его в одну функцию и передать свойство в качестве аргумента? Так что иногда я извлекаюx.City но в другие времена x.Country, Я пытался использовать цитаты, однако не могу соединить это должным образом, и, возможно, это не правильный подход.

1 ответ

Решение

Что касается сращивания цитаты, это работает для меня:

open System.Linq

type record = { x:int; y:string }

let mkQuery q =
    query {
        for x in [{x=1;y="test"}].AsQueryable() do
        select ((%q) x)
    }

mkQuery <@ fun r -> r.x, r.y @>
|> Seq.iter (printfn "%A")
Другие вопросы по тегам