2015-02-10 45 views
1

我正在考慮OrmLite作爲重寫我的web項目的PonyORM(python)的.NET替代品。使用OrmLite的選擇與F#

我正在使用F#,並且我正在用linq查詢語法的語法掙扎了一下。

C#的例子是這樣的:

db.Select<User>(u => u.Name).PrintDump(); 

,我曾嘗試與

db.Select<User>(fun (u:SqlExpression<_>) -> u.Name).PrintDump() 

模仿,但我得到一個錯誤: '名稱沒有定義'。

什麼是正確的語法?

下不產生一切的輸出:

db.Select<User>(fun (u:SqlExpression<_>) -> u).PrintDump() 

[ 
    { 
    Date: 2014-10-25, 
    Name: "Jason" 
    }, ... 

回答

0

你得到的錯誤,因爲你的類型不匹配。

db.Select<User>(fun (u:SqlExpression<_>) -> u.Name) 

在這種情況下u不是用戶對象,它是一個SqlExpression這在OrmLite一個類。如果你檢查你的智能感知,你會發現它有很多方法,但沒有一個是Name

我敢打賭,你想要做的實際上是這樣的

db.Select(db.From<User>().Select(fun (u : User) -> u.Name) 

在這種情況下,內部的東西實際上是一個SqlExpression<User>這就是OrmLite期待。