【问题标题】:Select Numeric Values From String Linq to Entities从字符串 Linq 中选择数值到实体
【发布时间】:2020-08-06 11:22:32
【问题描述】:

我的记录具有名为 Projectstring 属性。这些通常具有的值类似于 A-A-40019-0,但实际上它们可以是任何值。

我需要能够从 Project 项目属性中提取数值,然后我可以尝试将其转换为 ulong 以便对其进行排序。

我正在尝试使用以下代码从 Project 属性中选择数值。

return jobs.Select(x => new JobViewModel
{         
     Sequence = x.Project.Where(y => char.IsDigit(y)).ToString()
});

当我尝试这个时,我得到以下错误

DbExpressionBinding 需要一个带有集合的输入表达式 结果类型。

我需要使用 Linq to Entities,因为我无法将所有记录加载到内存中。

我正在使用 SQL Server。

【问题讨论】:

  • 带回Project 属性,然后在客户端提取数字 - 您是要忽略A-A-40019-0 中的- 以获取400190 还是只获取40019JobViewModel 是否设置了其他属性?
  • @NetMage 我不能把它带到客户端,因为我需要能够按它排序
  • 您也可以(必须)在客户端进行排序。根据您使用的 EF,您还可以创建一个 SQL 存储过程来提取数字 - 您将如何在 SQL 中执行此操作?

标签: c# linq linq-to-entities


【解决方案1】:

你没有说你使用的是哪个数据库,但我确实为 SQL Server 找到了这个。 https://www.mytecbits.com/microsoft/sql-server/extract-numbers-from-string#:~:text=%20Extract%20Numbers%20From%20String%20In%20SQL%20Server,you%20want%20to%20split%20this%20delimited...%20More%20

希望类似的技术可以用于您正在使用的数据库。

您可以创建一个视图,并在最后添加一个调用该函数的列,然后您可以对其进行排序。

或者纯粹在我没有尝试过的 C# 中:

Convert.ToInt32(new string(y.project.Where(c => Char.IsDigit(c)).ToArray())

【讨论】:

  • 我需要用 C# 而不是 SQL。
  • 您说您不能将所有记录加载到内存中。如果您在 C# 中执行此操作而不是 AFAIK,则 SQL 将获取所有记录,通过您的方法将它们加载到内存中,然后对其进行排序。无论如何,将 SQL 代码转换为 C# 并不难,所以试一试。您可以使用正则表达式来提取所有数字吗? Stackoverflow 上有很多关于如何做到这一点的内容。
  • 我说我需要将它作为 Linq to Entities 保留,这样正则表达式就不起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多