是否有一个JS库支持使用nodejs将linq写入sql查询?

时间:2012-02-01 19:27:00

标签: sql-server linq node.js

我看到jslinq,并且看到tds js库一起使用节点和SQL ...那么有没有人曾经一起使用过这些技术?

我希望能够在nodejs app中编写linq到sql查询...

5 个答案:

答案 0 :(得分:4)

今天,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),具体取决于数据源......

答案 1 :(得分:3)

本周我开始使用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的局限性,很难弄明白,如何接受中的变量,因为箭头函数被解析为字符串。我用“虚拟”变量($)和args列表作为最后一个参数来解决它。

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

答案 2 :(得分:1)

你应该签出edge.js框架,它将node.js与.Net连接起来。一种方法是在edge中使用内置的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 datacontext并使用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();
      }
    }
*/});

答案 3 :(得分: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查询的标准免责声明...>

如果您正在创建将向您的数据库发送SQL查询的客户端javascript,您可以打开一大堆蠕虫 - 如果浏览器可以指示SQL查询,并且用户可以操纵来自浏览器的内容,那么您容易受到SQL injection attacks的攻击。<​​/ p>

底线:请勿在浏览器中使用此功能!

答案 4 :(得分:-2)

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

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