gpt4 book ai didi

c# - LINQ to Entities 无法识别方法 IsNullOrWhiteSpace

转载 作者:太空狗 更新时间:2023-10-29 22:10:40 24 4
gpt4 key购买 nike

我有以下代码:

var countries = from c in db.Countries
where (string.IsNullOrWhiteSpace(searchAlpha2) || (c.Alpha2 ?? string.Empty).ToUpper().Contains(searchAlpha2.ToUpper()))
&& (string.IsNullOrWhiteSpace(searchAlpha2) || (c.Alpha3 ?? string.Empty).ToUpper().Contains(searchAlpha3.ToUpper()))
&& (string.IsNullOrWhiteSpace(searchName) || (c.Name ?? string.Empty).ToUpper().Contains(searchName.ToUpper()))
select c;

此代码在 SQL 数据库上使用 Entity Framework v6 Code First。

除了性能之外,如果我不包含 IsNullOrWhitespace,当过滤条件为空时我不会得到任何结果(我已经测试了空值和空值);然而,当存在一个值时,它会按预期工作。

我收到错误:

LINQ to Entities does not recognize the method 'Boolean IsNullOrWhiteSpace(System.String)' method, and this method cannot be translated into a store expression.

我正在尝试使用 searchXXX 字符串来过滤列。我试过使用 RegEx.IsMatch、SqlMethods.Like 和下面的代码,但都给我错误提示不允许使用这些函数(错误来自 EntityFramework.SqlServerLinq到实体)。不过,我已经在这里看到很多帖子都成功地完成了这项工作 - 所以想知道我是否遗漏了一些基本的东西?

最佳答案

如果您想以当前形式使用您的声明,您可能需要替换

string.IsNullOrWhiteSpace(searchAlpha2)

!(searchAlpha2 == null || searchAlpha2.Trim() == string.Empty)

以及所有其他值,以便将其转换为可用的 SQL。

更新:从@DavidKempfner 的评论中复制

EntityFramework.6.2.0 开始,它生成了检查
!(searchAlpha2.Trim() == string.Empty),
IE。它忽略了 searchAlpha2 == null || 部分。

改用这个:

!string.IsNullOrEmpty(entity.searchAlpha2.Trim())

关于c# - LINQ to Entities 无法识别方法 IsNullOrWhiteSpace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com