我正在尝试使用dynamic-linq返回一个新列,该列是id
和name
的串联,并且连字符在中间连接:
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
是变量,因为这些变化取决于用户的选择?
注:
Where
子句。id
和name
列都是字符串答案 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,所以我认为这应该没问题。
希望它有所帮助...