具有可选Where子句和Sql Server CE的Linq

具有可选Where子句和Sql Server CE的Linq,linq,linq-to-sql,sql-server-ce,Linq,Linq To Sql,Sql Server Ce,我有一个带有可选用户名字段的搜索表单。如果未提供用户名,则应返回所有匹配项 我正在使用Linq和Sql Server CE 4.0 linq代码如下所示-> from p in context.Accounts where (name==string.Empty || p.UserName.Contains(name)) 对于Sql Server CE,这会引发以下错误 “此位置不允许使用参数。请确保'@'符号位于有效位置,或者此SQL语句中的参数完全有效。” 是否有其他方法可以在Linq中使

我有一个带有可选用户名字段的搜索表单。如果未提供用户名,则应返回所有匹配项

我正在使用Linq和Sql Server CE 4.0

linq代码如下所示->

from p in context.Accounts
where (name==string.Empty || p.UserName.Contains(name))
对于Sql Server CE,这会引发以下错误

“此位置不允许使用参数。请确保'@'符号位于有效位置,或者此SQL语句中的参数完全有效。”

是否有其他方法可以在Linq中使用可选Where子句

供参考如下

from p in context.Accounts
where (string.IsNullOrEmpty(name) || p.UserName.Contains(name))
告诉我错误

为函数指定的参数值无效。[参数#=1,函数名称(如果已知)=isnull]”}

这是因为Sql Server CE不支持IsNull。如果Name参数为Null,我只需执行以下操作

if (name == null)
    name = string.Empty;
试试这个:

var query = from p in context.Accounts
            select p;

if (!string.IsNullOrEmpty(name)) {
    query = query.Where(p => p.UserName.Contains(name));
}

没有规则规定查询必须在单个语句中。您可以添加到现有查询中,直到实际执行为止。

执行时,这会编译成一条sql语句吗?或者它会拉所有帐户然后过滤等等。比如说我有10000个帐户,它们会被拉入内存然后过滤吗?@Kenoyer130,它会编译成一条sql语句。@Kenoyer130你应该读一点关于LINQ延迟执行的内容,或者会有一些你不理解的惊喜和错误;)