我有以下linq声明:
var fliteredAddressLocations = addressLocations
.Where(c => (c.StateId == companyStateID) &&
(c.Suburb.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1)).ToList();
如果我删除"&&"之后的部分。并运行它 - 它可以返回大约3000个项目。
因为它返回0项。
我怀疑我写错了,并尝试了很多方法来构建它,包括发表几个单独的陈述。
它是一个搜索功能,用于搜索包含"查询"中字符的一组郊区。并且stateId为companyStateId。
你应该如何使用indexOf写这个,以便它返回子集?
答案 0 :(得分:0)
我怀疑IndexOf
没有正确地翻译成SQL。
您可以尝试使用Contains
代替:
var fliteredAddressLocations = addressLocations
.Where(c => (c.StateId == companyStateID) &&
(c.Suburb.Contains(query, StringComparison.OrdinalIgnoreCase)).ToList();
答案 1 :(得分:0)
在我使用SQL Server Compact DB和Linq2Sql(非EF)的实验中,此语句可以正常工作:
from p in Places
where p.Name.IndexOf("Ew") > -1
select p
返回Name为“New York”的行。如果我添加StringComparison.OrdinalIgnoreCase
它失败(抛出异常),但是,至少在这种情况下,搜索是不区分大小写的,没有参数。
请注意,您也可以使用
from p in Places
where p.Name.Contains("Ew")
select p
具有相同的效果并且更清晰。
答案 2 :(得分:0)
我终于设法解决了如何在EF核心中使用内置SQL函数的问题,而这些功能并没有通过EF.Functions包含在EF中。
无需进一步说明,请将其放在您的Db上下文文件中:
[DbFunction("CHARINDEX", IsBuiltIn = true)]
public static long CHARINDEX(string substring, string string)
{
throw new NotImplementedException();
}
并使用相同的模板导入其他任何SQL函数。
@edit: 如注释中所述,请密切注意类型。我的错误是使用了错误的字符串对象重载方法。我使用的是IndexOf( char 输入)而不是IndexOf( string 输入)。
建议您检查Functions mapping table以获得详细信息!