我看到jslinq,并且看到tds js库一起使用节点和SQL ...那么有没有人曾经一起使用过这些技术?
我希望能够在nodejs app中编写linq到sql查询...
答案 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调用来使用服务。