LINQ与NLua一起使用是否可行?

时间:2013-12-02 20:39:00

标签: c# linq lua nlua

我想知道是否可以将LINQ与NLua一起使用?我搜索过各种来源,包括项目github page,但没有任何运气。我得到了以下最小的C#示例:

using (var lua = new Lua())
{
    lua.LoadCLRPackage();
    lua["data"] = new[] { 1, 2, 3, 4, 5 };
    var res = lua.DoFile(@"C:\..\MyLua.lua");
}

MyLua.lua看起来像这样:

luanet.import_type('System.Linq')

-- syntax error near 'in'
res = from d in data where d > 2 select d

-- ')' expected near '='
res = data:Where(x => x > 2)

return res

执行时,NLua返回语法错误(在上面的lua脚本中显示为注释)。很高兴知道这是否是设计的,如果是的话,是否有任何未来版本的NLua将支持LINQ?

1 个答案:

答案 0 :(得分:1)

LINQ是一种“语言集成查询”:集成是关键,即C#语法支持符合LINQ语法和语义的构造。

NLua不会改变Lua的语法(更不用说语义)了,它只是让Lua提供了.NET库,可以很容易地从C#运行Lua脚本,并且可以轻松地在两种语言之间交换数据。那么设计是否在NLua中不支持您的LINQ查询?好吧,有点!因为NLua的设计不会改变或扩展Lua语法。

未来的版本是否会支持它?那么,任何未来是一个漫长的时间,谁能预测未来?即使当前的维护人员拒绝,他们也可能决定在几个月内放弃该项目,由另一位开发人员接管,他们认为这将是一个好主意。所以你的部分问题没有答案。

所有这一切,答案仍然是肯定的,你可以使用Lua的LINQ:在你发布到Lua的C#函数中创建你的LINQ查询,并从Lua调用它们。顺便说一下,这还不错,但仍然没有你想要做的那么强大,那就是在你的Lua代码中创建LINQ而不需要编译C#代码。我不认为这是可能的,虽然我依稀记得有一种方法可以动态编译C#代码,但我可以做梦。

相关问题