带有 Trim 的 SQLite 表达式函数会引发错误

问题描述 投票:0回答:1

我在我的

SQLite
项目中使用
C#
创建了一个数据库。在函数中,我喜欢使用
Linq
过滤表中的记录。因此,我使用 this code 作为 And 函数,编写了

Expression<Func<Word, bool>> fnz = w => w.CreatedAt >= dt && w.CreatedAt < endDate;
if (!string.IsNullOrEmpty(username))
{
    Expression<Func<Word, bool>> fnz2 = w => w.CreatedBy.Trim() == username;
    fnz = fnz.And(fnz2);
}

如果我使用一些

string
函数,例如
Trim()
,我会收到此错误

函数trim()的参数数量错误

我看到了与此错误相关的其他帖子,但没有看到

Linq

c# sqlite sqlite-net
1个回答
0
投票

不确定这是否有帮助,但在带有 MSSQL 的 EntityFramework 中,LINQ/lambda 表达式在往返之前针对数据库运行,这意味着它们(尝试)被转换为 SQL 语法。我不知道您的代码中是否已经发生了数据库往返,但如果没有,我怀疑您的代码尝试将

string.Trim()
转换为 SQLite 语法,该语法似乎存在,但具有不同的重载。

此外,

w.CreatedBy.Trim()
真的有必要吗?您真的希望数据库中的值有尾随空格吗?

如果是这样,从上面保护我的观点,您将必须更改代码以首先进行数据库往返(例如通过调用

.ToList()
),然后使用您的表达式进行过滤。请记住,这可能会导致大量数据从数据库传递到内存中。

© www.soinside.com 2019 - 2024. All rights reserved.