我正在构建一个winforms桌面应用程序,而app DB是Sqlite。 我正在使用Linq to Entities和Sqlite ADO.NET provider。
在我的应用中,我需要在文本列中搜索字符串。 示例(“IsNotEmpty”是我的!string.IsNullOrEmpty(str)的扩展方法):
if (param.FirstName.IsNotEmpty())
{
selectedCustomers = selectedCustomers.Where(c => (c.firstName.Contains(param.FirstName)));
}
if (param.LastName.IsNotEmpty())
{
selectedCustomers = selectedCustomers.Where(c => c.lastName.Contains(param.LastName));
}
问题是此查询正在转换为CHARINDEX SQL函数,而Sqlite不支持它。
当我切换到IndexOf(字符串)函数(as suggested here)时,查询也被转换为CHARINDEX。
当我切换到IndexOf(字符串,索引)时,我收到以下错误:
LINQ to Entities无法识别方法'Int32 IndexOf(System.String,Int32)'方法,并且此方法无法转换为商店表达式。
有什么想法吗?我应该切换到Access吗?
答案 0 :(得分:1)
由于安全性,您不能在LINQ实体中使用.NET函数,例如除了检查字符串之外,IndexOf()
可能会做很多其他事情。
改为使用实体SQL http://msdn.microsoft.com/en-us/library/bb738683.aspx。