Linq to EF with Sqlite - 无法搜索字符串(string.contains)

时间:2011-03-29 22:30:22

标签: sqlite

我正在构建一个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吗?

1 个答案:

答案 0 :(得分:1)

由于安全性,您不能在LINQ实体中使用.NET函数,例如除了检查字符串之外,IndexOf()可能会做很多其他事情。

改为使用实体SQL http://msdn.microsoft.com/en-us/library/bb738683.aspx