我使用Linq to Entities,由MySql支持。我希望能夠使用各種內置的MySql函數,例如rand
。如果我使用的是MS SQL Server,我可以使用SqlFunctions類,但這不適用於MySql;我得到的錯誤:在MySql和實體框架中使用SqlFunctions或EdmFunctions的等價集合
Rand() on the type 'System.Data.Objects.SqlClient.SqlFunctions' cannot be translated into a LINQ to Entities store expression.
我已經想通了如何創建我的數據庫,它包裝內置的RAND一個用戶定義的函數:
CREATE FUNCTION Random()
RETURNS real NOT DETERMINISTIC
RETURN RAND();
我然後從數據庫中更新我的模型(我使用的是.ebmx),並創建一個靜態類,像這樣:
public static class MyUserFunctions {
[EdmFunction("MyModelNamespace.Store", "Random")]
public static double Random() {
throw new ArgumentNullException();
}
}
這讓我在我的實體類。凡子句中調用MyUserFunctions.Random:
using (MyEntities entities = new MyEntities()) {
// Yes, I know ORDER BY RAND() is slow
return entities.products.OrderBy(prod => MyUserFunctions.Random()).Take(4);
}
所以現在的問題是,我可以做到這一點,而無需創建愚蠢的包裝UDF,只是做(也許通過適當設置EdmFunction
的Namespace
屬性(在的情況下,所有的內置可更直接MySQL的函數SqlFunctions
命名空間是"SqlServer"
)。
你加入了MySQL .NET連接到您的項目? http://dev.mysql.com/downloads/connector/net/ – nisav 2014-01-30 15:02:32