在vb.net或C#中的LINQ中使用indexOf()函数?

在vb.net或C#中的LINQ中使用indexOf()函数?,c#,vb.net,string,linq,C#,Vb.net,String,Linq,我在数据库中有一个表,它有一个列名。在显示在网格中之前,我必须在读取表时更改所有项的名称。我必须使用这个LINQ子句 Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection Select hospitalName = l.HOSPITAL_NAME.Substring(0,l.HOSPITAL_NAME.IndexOf("--")) 当我使用上述代码时,会收到以下错误消息: LINQ

我在数据库中有一个表,它有一个列名。在显示在网格中之前,我必须在读取表时更改所有项的名称。我必须使用这个LINQ子句

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection
                       Select hospitalName = l.HOSPITAL_NAME.Substring(0,l.HOSPITAL_NAME.IndexOf("--"))
当我使用上述代码时,会收到以下错误消息:

LINQ to实体无法识别方法“Int32” IndexOf(System.String,System.StringComparison)方法,以及 方法无法转换为存储表达式

但是当我删除
IndexOf()
时,它的工作正常:

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection
                   Select hospitalName = l.HOSPITAL_NAME.Substring(10)

我如何才能从我的细胞中删除这样的东西?

也许使用匿名

Dim hospitalList = From l In db_Obj.VWrmz_HospitalCorrection
                       Select New With {.hospitalName = l.HOSPITAL_NAME.Substring(0,l.HOSPITAL_NAME.IndexOf("--"))}

在您的错误消息中,无法识别的方法是“Int32.IndexOf”,而“IndexOf”方法的调用方是“Int32”而不是“String”,您的医院名称是否可能是一个数字

如果找不到问题,可以尝试使用正则表达式而不是“Substring”方法,如下图所示(我使用的是C#,所以…这是C#代码,很抱歉):

希望这能有所帮助

这是它的C版本。
LINQ到EF无法将
IndexOf
方法转换为sql语法。您可以获取数据并在以后对其执行操作

from ll in (from l in db_Obj.VWrmz_HospitalCorrection
 select hospitalName = l.HOSPITAL_NAME).ToList()
 select ll.Substring(0, ll.IndexOf("--"))

如果找不到字符串“-”,则返回-1。因此,您将得到导致错误消息的子字符串(0,-1)。@jdweng-虽然这是一个问题,但它不是错误的来源。错误的根源在于实体框架引擎不知道如何将
IndexOf
转换为sql表达式。它不是说
Int32.IndexOf
,而是说
Int32 IndexOf
。这意味着
IndexOf
的返回值是
Int32
。谢谢。。你能给我描述一下这几天到底发生了什么事吗?
from ll in (from l in db_Obj.VWrmz_HospitalCorrection
 select hospitalName = l.HOSPITAL_NAME).ToList()
 select ll.Substring(0, ll.IndexOf("--"))