动态 linq 中的字符串连接 Select
String concatenation in dynamic-linq Select
我正在尝试 return 一个新列,它是 id
和 name
的串联,中间有一个连字符,使用动态 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 可以解释的方式将引用的部分 " - "
添加到表达式中,我也想要 id
和 name
是变量,因为它们会根据用户的选择而变化?
注意:
- 我正在使用 dynamic-linq,因为我想要连接的列的名称会根据用户选择而有所不同,而且我已经在使用 dynamic-linq 作为
Where
子句)。
id
和 name
列都是字符串类型
如果我没理解错,这应该可行。
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)")
我正在尝试 return 一个新列,它是 id
和 name
的串联,中间有一个连字符,使用动态 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 可以解释的方式将引用的部分 " - "
添加到表达式中,我也想要 id
和 name
是变量,因为它们会根据用户的选择而变化?
注意:
- 我正在使用 dynamic-linq,因为我想要连接的列的名称会根据用户选择而有所不同,而且我已经在使用 dynamic-linq 作为
Where
子句)。 id
和name
列都是字符串类型
如果我没理解错,这应该可行。
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)")