在Entity Framework查询中使用user trimstart

11

我该如何使用trimstart,以便Entity Framework能够理解要做什么?

这是我的查询:

string number="123";
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number);

如何在不使用AsEnumerable的情况下让这个查询起作用(公司8有很多工人)?


@Austin Salonen: 数字是字符串! - Naor
确实。我想我的意思是字符串内容始终是数字(就像你的例子一样),还是像“AAK89234”这样的内容也是有效的“数字”? - Austin Salonen
@Austin Salonen:它甚至可以是你写的AAK89234行代码。 - Naor
3个回答

23

尝试使用SqlFunctions.PatIndex。我使用类似下面的查询测试了值为"000123""000One""abcde"的情况,并正确选择了具有值"123""One""abcde"的行。

Workers.Where(x => x.CompanyId == 8 && 
                   x.Number.Substring(SqlFunctions.PatIndex("%[^0]%", x.Number).Value - 1) == number);

1

我曾经遇到过这样的情况,只需简单地使用

.AsEnumerable()

让它工作。

Workers.AsEnumerable().Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number);

0

这是因为 SQL 中的修剪函数只能修剪空格,因此 EF 支持 TrimStart 方法,但仅限没有参数的情况。

你的要求首先应该引起关于提高数据库中数据质量的讨论!你的数据没有提供支持以有效方式执行此类查询的质量。


我理解你的意思,这是数据存储为零的问题。但现在这就是系统,我需要找到解决办法。谢谢。 - Naor
被踩 - 我同意数据库是应该清理数据的地方,但第三方数据库并不总是允许控制。一个更有用的答案应该是像Jeff提到的那样给出一个解决问题的方法。- SO上有太多理论回答,而不够实际。 - hewstone
点赞。有些人指出实际问题是很好的,这是人们互相学习的方式。不过也最好给出一个实用的答案,但Jeff已经做到了。 - Nick N.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接