参数LINQ查询

时间:2016-04-11 05:54:02

标签: linq f# quotations

这是对accessing dynamic objects in F#的另一种看法我正在使用let y = x.Where(fun x -> x.City ="London").Select("new(City,Zip)")来参数化查询并提取必要的项目。这些对应于SQL查询中的列,并由datacontext的属性表示。这是我想作为参数传递的部分。

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 个答案:

答案 0 :(得分:7)

关于报价拼接,这对我有用:

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")