我该如何使用trimstart,以便Entity Framework能够理解要做什么?
这是我的查询:
string number="123";
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number);
如何在不使用AsEnumerable的情况下让这个查询起作用(公司8有很多工人)?
我该如何使用trimstart,以便Entity Framework能够理解要做什么?
这是我的查询:
string number="123";
Workers.Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number);
如何在不使用AsEnumerable的情况下让这个查询起作用(公司8有很多工人)?
尝试使用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);
我曾经遇到过这样的情况,只需简单地使用
.AsEnumerable()
让它工作。
Workers.AsEnumerable().Where(x => x.CompanyId == 8).Where(x => x.Number.TrimStart('0') == number);
这是因为 SQL 中的修剪函数只能修剪空格,因此 EF 支持 TrimStart
方法,但仅限没有参数的情况。
你的要求首先应该引起关于提高数据库中数据质量的讨论!你的数据没有提供支持以有效方式执行此类查询的质量。