【问题标题】:Use indexOf() function in LINQ in vb.net or C#?在 vb.net 或 C# 的 LINQ 中使用 indexOf() 函数?
【发布时间】:2016-04-23 07:46:13
【问题描述】:

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

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

当我使用上面的代码时,我得到这个错误信息:

LINQ to Entities 无法识别方法 'Int32 IndexOf(System.String, System.StringComparison)' 方法和这个 方法无法转换为商店表达式。

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

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

我该怎么做才能从我的单元格中删除这样的东西?

【问题讨论】:

  • 如果未找到字符串“--”,您将返回 -1。所以你会得到 Substring(0, -1) 这会导致错误消息。
  • @jdweng - 虽然这是一个问题,但它不是错误的根源。错误的根源在于Entity Framework引擎不知道如何将IndexOf翻译成sql表达式。

标签: c# vb.net string linq


【解决方案1】:

也许使用匿名?

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

【讨论】:

  • 谢谢..你能用这个点描述一下到底发生了什么吗?
【解决方案2】:

在您的错误消息中,无法识别的方法是“Int32.IndexOf”,“IndexOf”方法的调用者是“Int32”而不是“String”,您的 HOSPITAL_NAME 是否有可能是数字??

如果你找不到问题,你可以试试正则表达式而不是“Substring”方法,像这样(我用的是C#,所以……这是c#代码,抱歉):

Regex regex = new Regex("--.*");
var hospitalList = From l In db_Obj.VWrmz_HospitalCorrection
                   Select hospitalName = regex.Replace(l.HOSPITAL_NAME, "");

希望对你有帮助

【讨论】:

  • 没有Int32.IndexOf,而是Int32 IndexOf。这意味着IndexOf返回值Int32
【解决方案3】:

这是它的 C# 版本。
LINQ to 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("--"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2013-03-21
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多