2012-02-01 48 views

回答

-2

這是不可能的,至少如果你想在JavaScript中創建即席查詢。 Linq(任何味道)是一種編譯器技術。使用Linq語法或Linq表達式的查詢由C#或VB編譯器處理,不直接由數據庫解釋。

傳統的方式做,這是通過在C#中的Web服務,使用LINQ來獲取和存儲數據,並呈現出簡潔的API提供給客戶。然後客戶端可以通過AJAX調用來使用服務。

1

您應該檢出edge.js框架,它與.net連接的node.js。一種方法是在邊緣使用內置的T-SQL支持,然後使用像linq.js這樣的方式來處理結果。

var getTop10Products = edge.func('sql', function() {/* 
    select top 10 * from Products 
*/}); 

getTop10Product(null, function (error, products) { 
    if (error) throw error; 
    console.log(products); 
}); 

否則,你可以設置一個EF的datacontext在.NET庫,並調出到使用LINQ

var getTop10Product = edge.func(function() {/* 
    async (input) => { 
     using (var db = new ProductContext()) 
     { 
     //Linq to EF query 
     var query = from b in db.Products 
        orderby b.Name 
        select b; 
     return query.Take(10).ToList(); 
     } 
    } 
*/}); 
0

我今天碰到這個問題就來了,因爲我想知道同樣的事情,並經過多一點搜索我碰到Squel

從他們的網站直接引用:

//this code 
squel.select() 
    .from("students") 
    .field("name") 
    .field("MIN(test_score)") 
    .field("MAX(test_score)") 
    .field("GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')") 
    .group("name") 
); 

/* will return this SQL query as a string: 
    SELECT 
     name, 
     MIN(test_score), 
     MAX(test_score), 
     GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') 
    FROM 
     students 
    GROUP BY 
     name 
*/ 

希望這將有助於任何人誰碰到這個問題來了,而搜索。

祝你好運!

PS:<插入標準的免責聲明關於瀏覽器不產生SQL查詢... >

如果要創建客戶端JavaScript,將SQL查詢發送到數據庫打開蠕蟲的一個整體, - 如果瀏覽器可以規定SQL查詢,並且用戶可以操縱來自瀏覽器的內容,那麼您很容易受到SQL injection attacks的影響。

底線:不要在瀏覽器中使用此功能!

3

今天,JayData http://jaydata.org/做到這一點。

您可以使用看起來非常相似,C#(支持它,像最新的火狐瀏覽器,或transpiler,像打字稿或Traceur)新ES6 Arrow功能語法:

todoDB.Todos 
    .filter(todo => todo.Completed == true) 
    .map(todo => todo.Task) 
    .forEach(taskName => $('#list') 
    .append('Task: ' + taskName + ' completed')); 

查詢將根據數據源轉換爲SQL查詢(select Task from Todos where Completed = true)或者$ filter URL參數(http://.../?$filter=Completed%20eq%201&$select=Task)...

2

本週我已經開始使用LINQ to Entities的JS變體。檢查UniMapperJS

var comments = await Comment.getAll() 
.where(e => e.author.endsWith("something") || e.author.startsWith("somethingElse")) 
.orderByDescending("created") 
.limit(10) 
.skip(0) 
.exec(); 

但是JS的Cuz的限制,這是很難搞清楚,如何接受變量其中因爲箭頭功能被解析爲字符串。我已經通過「虛擬」變量($)和參數列表作爲最後一個參數來解決它。

var comments = await Comment.getAll() 
.where(e => e.author.endsWith($) || e.author.startsWith($), filter.endsWith, filter.name) 
.orderByDescending("created") 
.limit(10) 
.skip(0) 
.select(e => e.author) 
.exec();