动态 linq 中的字符串连接 Select

String concatenation in dynamic-linq Select

我正在尝试 return 一个新列,它是 idname 的串联,中间有一个连字符,使用动态 linq:

query.Select("new(id, name, id & " - " & name As idName")

但是,即使没有连字符,我什至无法进行简单的连接:

query.Select("new(id, name, id & name As idName")

这会引发 System.NotSupportedException

LINQ to Entities does not recognize the method System.String Concat(System.Object, System.Object) method, and this method cannot be translated into a store expression.

有没有办法解决这个问题,如果有的话,我还如何以 dynamic-linq 可以解释的方式将引用的部分 " - " 添加到表达式中,我也想要 idname 是变量,因为它们会根据用户的选择而变化?

注意:

如果我没理解错,这应该可行。

Imports System.Linq.Dynamic.Core

Dim col1 = "id"
Dim col2 = "name"

Dim results = query.Select($"new({col1} as {col1},
                                 {col2} as {col2},
                                 {col1} & "" - "" & {col2} as {col1}_{col2})")

也许还有其他方法,但你仍然只会查询一次数据库,所以我认为应该没问题。

希望对您有所帮助...

System.Linq.Dynamic NuGet package lists https://github.com/kahanu/System.Linq.Dynamic为项目页面。 此处,示例来自 Scott Guthrie original 2008 blog on dynamic LINQ were being transferred over to the GitHub project's wiki,文档正在扩展。

但是,通过 issues list, the repository appears to be dead/dying (discussion here). Currently, the most active fork/NuGet package 查看似乎是 System.Linq.Dynamic.Core(支持 .NET 标准和 .NET Core)。

原始 System.Linq.Dynamic 中的文档和示例目前更为广泛,但两个 wiki 都有一个关于 dynamic expressions and the expression language 的部分,其中包括一个关于运算符的部分。这包括串联:

x & y String concatenation. Operands may be of any type.

在我的测试中,如果您从 System.Linq.Dynamic NuGet 包切换到 System.Linq.Dynamic.Core 包(您不必使用 .NET Core,它也适用于其他版本的 .NET)。

Imports System.Linq.Dynamic.Core

query.Select("new(id & name As id_name)")