1

我的代码:

i f(!string.IsNullOrWhiteSpace(gender))
    if (gender == "NULL")
        predicate = predicate.And(x => string.IsNullOrWhiteSpace(gender));
    else
        predicate = predicate.And(x => x.Gender == gender);

当性别为 NULL 并且我正在执行流线时:

var filteredUsers = _personExtendedRepository.GetMany(predicate).ToList();

发生错误:

“LINQ to Entities 无法识别 'Boolean IsNullOrWhiteSpace(System.String)' 方法,并且该方法无法转换为存储表达式。”

注意:当我在 SQL Server Management Studio 中执行以下行时:

SELECT * FROM UVW_Sample WHERE Gender IS NULL

正在显示记录。请帮助如何解决这个问题。

4

2 回答 2

2

LINQ-to-Entities 的功能有限,因为它将您的表达式转换为 SQL,并且它不知道如何将 string.IsNullOrWhiteSpace 转换为 SQL。它也不知道如何将 .ToString() 转换为 SQL。

您需要做的是在 LINQ-to-Entities 之外执行翻译。在您的情况下,您的谓词应该是:

x=>x==null || x.Trim()==""
于 2012-10-24T09:44:12.253 回答
1

string.IsNullOrWhiteSpace不能被翻译成 SQL,所以如果你想检查列是否为空,请使用类似:

predicate = predicate.And(x => x.Gender == null);
于 2012-10-24T09:42:59.627 回答