有一个JS库,支持与nodejs写入LINQ到SQL查询?

我看到jslinq,并看到tds js库一起使用节点和SQL …所以有谁曾经一起使用这些技术?

我想能够写一个nodejs应用程序中的SQL查询LINQ …

这是不可能的,至less如果你想在Javascript中创build即席查询。 Linq(任何味道)是一种编译器技术。 使用Linq语法或Linqexpression式的查询由C#或VB编译器处理,不直接由数据库解释。

传统的做法是通过C#中的Web服务,使用Linq来获取和存储数据,并向客户端提供一个干净的API。 然后客户端可以通过AJAX调用来使用服务。

今天,JayData http://jaydata.org/做到这一点。

您可以使用与C#非常相似的新ES6箭头函数语法(使用支持它的浏览器,例如最新的Firefox或转换器,如TypeScript或Traceur):

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 )的数据源…

本周,我开始使用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的限制,很难弄清楚,如何接受variables在哪里,因为箭头函数被parsing为string。 我已经通过“虚拟”variables($)和参数列表解决了最后一个参数。

 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(); 

您应该检出edge.js框架,它将node.js与.Net连接起来。 一种方法是在边缘使用内置的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); }); 

否则,您可以在.Net库中设置一个EF数据环境,并使用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(); } } */}); 

我今天遇到了这个问题,因为我在想同样的事情,经过多一点search,我遇到了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 */ 

希望这会帮助任何人在search时遇到这个问题。

祝你好运!

PS:<在浏览器中插入关于不生成SQL查询的标准免责声明…>

如果您正在创build将向您的数据库发送SQL查询的客户端JavaScript,则会打开一整jar蠕虫 – 如果浏览器可以规定SQL查询,并且用户可以操纵来自浏览器的内容,那么您很容易SQL注入攻击 。

底线:不要在浏览器中使用这个!