带有可选 Where 子句和 Sql Server CE 的 Linq
Posted
技术标签:
【中文标题】带有可选 Where 子句和 Sql Server CE 的 Linq【英文标题】:Linq with optional Where clauses and Sql Server CE 【发布时间】:2011-02-27 23:42:57 【问题描述】:我有一个带有可选用户名字段的搜索表单。如果未提供用户名,则应返回所有匹配项。
我正在使用 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;
【问题讨论】:
【参考方案1】:试试这个:
var query = from p in context.Accounts
select p;
if (!string.IsNullOrEmpty(name))
query = query.Where(p => p.UserName.Contains(name));
没有规定查询必须在单个语句中。您可以添加到现有查询,直到您实际执行它为止。
【讨论】:
执行时会编译成一条sql语句吗?或者它会提取所有帐户然后过滤等。比如假设我有 10,000 个帐户,它们会全部被拉入内存然后过滤吗? @Kenoyer130,它会编译成一条sql语句。 @Kenoyer130 你应该阅读一些关于 LINQ 延迟执行的内容,否则会有你无法理解的惊喜和错误;)以上是关于带有可选 Where 子句和 Sql Server CE 的 Linq的主要内容,如果未能解决你的问题,请参考以下文章