将空字符串传递给EF6

时间:2016-02-04 17:17:12

标签: c# sql entity-framework

此代码在SQL Server Management Studio中运行良好:

SELECT [PassNumber] FROM [dbo].[Customers] WHERE [PassNumber] <> 'A'

此代码也按预期工作:

string query = "PassNumber <> 'A'";
DbSqlQuery<Customer> data = db.Customers.SqlQuery( string.Format("select * from customers where {0}", query) );

现在更改为排除空行,​​此代码在SSMS上正常工作:

SELECT [PassNumber] FROM [Customers] WHERE [PassNumber] <> ''

但我找不到正确格式化查询字符串的方法。我已经尝试了所有可能的组合,但是代码抛出异常:“关键字'&lt;&gt;'附近的语法不正确。”

string query = "PassNumber <> '' ";
DbSqlQuery<Customer> data = db.Customers.SqlQuery( string.Format("select * from customers where {0}", query) );

注意:为简单起见,问题中的示例中没有检查空值。

3 个答案:

答案 0 :(得分:1)

LINQ查询时,为什么不使用EF。然后一切都会变得更容易:

var customerList = db.Customers.Where(c => c.PassNumber == string.Empty).ToList();

答案 1 :(得分:0)

您是否尝试过使用

is null
关于SQL的

子句? 或is not null

答案 2 :(得分:0)

如果您坚持使用原始SQL执行此操作,则应使用:

db.Customers.SqlQuery("select * from customers where PassNumber <> @p0, string.Empty);

db.Customers.SqlQuery("select * from customers where LEN(PassNumber) > 0);