2012-02-20 4 views
7

Я пытаюсь использовать Dapper dot net в F # для выполнения простого SQLite-запроса. Dapper возвращает коллекцию динамических объектов: использование их в C# является простым, но из того, что я понял, F # не имеет динамической реализации поиска свойств из коробки.Dapper dot net query в F #

Это работает, но я предполагаю, что есть лучшие способы сделать это, не прибегая к размышлению:

let (?) x prop = 
    let flags = BindingFlags.GetProperty ||| BindingFlags.InvokeMethod 
    x.GetType().InvokeMember(prop, flags, null, x, [||]) 

let doQuery() = 
    //... 
    let conn = new SQLiteConnection (connString) 
    conn.Open() 

    conn.Query("select first_name from customers") 
     |> Seq.map (fun c -> c ? first_name) 
     |> List.ofSeq 

Что является лучшим способом для реализации? оператора в этом случае?

+3

Кажется, что эта нить отвечает на ваш вопрос: http://stackoverflow.com/questions/6150087/f-dynamic-object-access – pad

+0

@pad Хороший ответ. Вы должны добавить свой ответ в качестве ответа, чтобы я мог его продвигать :-) –

+0

@OnorioCatenacci: Я добавляю его в качестве ответа, не уверен, что стоит ответить :). – pad

ответ

6

This thread состоит из нескольких решений для вашей проблемы. Специально, FSharp.Interop.Dynamic доступен на NuGet и готов к использованию.

+0

Я надеялся, что есть более простой способ (или без внешней библиотеки). Я полагаю, великая сила/большая ответственность и т. Д. ... :-) –