Questa è un'altra operazione su accessing dynamic objects in F# Lì sto utilizzando let y = x.Where(fun x -> x.City ="London").Select("new(City,Zip)")
per parametrizzare la query ed estrarre gli elementi necessari. Questi corrisponderebbero alle colonne in una query SQL e sarebbero rappresentati da una proprietà del datacontext. Questa è la parte che vorrei passare come parametro.query LINQ parametrica
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)}
Fondamentalmente desidero passare non solo x
ma anche x.*
. Mentre accedo a un database corretto, posso calcolare x. Tuttavia ora ho 40 piccole funzioni che estraggono le diverse colonne. È possibile calcolarlo su una funzione e passare la proprietà come argomento? Quindi a volte estraggo x.City
ma altre volte x.Country
. Ho provato a utilizzare le citazioni, tuttavia non è possibile giuntarle correttamente e forse questo non è l'approccio giusto.
Penso che si può solo tornare tuple dalla query come 'selezionare (cliente, customer.City)' e 'la tua qryfun' accetterà tuple come parametro Poiché tutte le varietà di proprietà del cliente non hanno il tipo statico, si utilizzano tuple per il flusso di dati intermedi tra funzioni/trasformazioni o si definisce il proprio tipo di record e lo si mappa nella query – paulik
@paulik thx. Non sono sicuro che sia fattibile. Per esempio. 'lascia qryfun (x, x.column) = query {per x in query2 do select (x.column)}' dove x è la tabella DB (Northwind.ServiceTypes.Customer) e x.column è una colonna (o campo) nella tabella Clienti, potrebbe essere x.City, x.Country, ecc .... quindi chiamerei 'qryfun (Northwind.ServiceTypes.Customer, Northwind.ServiceTypes.Customer.City)' Il secondo argomento è difficile perché Northwind.ServiceTypes.Customer.City appartiene a ciascun record non alla tabella. Se dai un'occhiata alla domanda di riferimento, la bulto da una stringa ("nuovo (Città, Paese)") – s952163