dynamic-linq中的字符串连接选择

时间:2018-01-28 11:46:17

标签: .net vb.net dynamic-linq

我正在尝试使用dynamic-linq返回一个新列,该列是idname的串联,并且连字符在中间连接:

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

但是,即使没有连字符,我甚至无法简单地连接工作:

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

这会引发System.NotSupportedException

  

LINQ to Entities无法识别System.String方法   Concat(System.Object,System.Object)方法,这个方法不可能   翻译成商店表达。

有没有办法解决这个问题,如果有的话,我怎样才能以动态linq可以解释的方式将引用的部分" - "添加到表达式中,我也希望id并且name是变量,因为这些变化取决于用户的选择?

注:

  • 我正在使用dynamic-linq,因为我要连接的列的名称因用户选择而异,而且我已经在使用dynamic-linq作为Where子句。
  • idname列都是字符串

2 个答案:

答案 0 :(得分:2)

System.Linq.Dynamic NuGet包将https://github.com/kahanu/System.Linq.Dynamic列为项目页面。  在这里,Scott Guthrie的original 2008 blog关于动态LINQ的示例正在转移到GitHub项目的wiki,文档正在扩展。

但是,查看issues list,存储库似乎已死/正在死亡(discussion here)。目前,最活跃的fork / NuGet package似乎是System.Linq.Dynamic.Core(它支持.NET标准以及.NET Core)。

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

  

x& y字符串连接。操作数可以是任何类型。

在我的测试中,如果您从System.Linq.Dynamic NuGet包切换到System.Linq.Dynamic.Core包,则连接有效(您不必使用.NET Core,它可以使用其他版本的.NET也是如此。

Imports System.Linq.Dynamic.Core

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

答案 1 :(得分:1)

如果我理解你,这应该有用。

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})")

可能有其他方法,但你仍然只会查询db,所以我认为这应该没问题。

希望它有所帮助...