【问题标题】:Linq a.Metadata.ToLower().ContainsLinq a.Metadata.ToLower().Contains
【发布时间】:2015-09-30 11:49:29
【问题描述】:

我对对象列表有疑问,其中一个具有例如元数据的字段,该字段为空。所以当我使用 a.Metadata.ToLower().Contains(someText) 它向我显示了关于空值的错误。我该如何解决? 附言我第一次看到这个问题,我尝试对其他也有空字段的对象列表做同样的事情,它可以工作,哪里有问题?

【问题讨论】:

  • 欢迎来到 SO,发布您目前尝试过的代码。,

标签: asp.net-mvc entity-framework linq


【解决方案1】:

而不是

.Where(a => a.Metadata.ToLower().Contains(someText))

.Where(a => a.Metadata != null && a.Metadata.ToLower().Contains(someText))

【讨论】:

  • 假设someText不为空,你可以像这样缩短.Where(a => (a.Metadata ?? "").ToLower().Contains(someText))
【解决方案2】:

Linq 不喜欢 null 值,但有时我们不喜欢上面的示例,只是忽略什么是 null,所以我习惯性地将 null 转换为空值或最小值。 所以即使是 null 的值也会像所有其他值一样受到关注。

您是否在 linq 查询中尝试过空融合运算符?

它:??运营商

如果您的数据为空,它将返回正确的部分(在我的情况下,我返回一个空字符串)。

例如,我想对包含一些空字符串的机器列表进行排序。

ListControleMachine.Sort((a1, a2) => (a1.MachineName ?? string.Empty).CompareTo(a2.MachineName ?? string.Empty));

当我对我的机器进行排序时,如果它的名称为 null,我会将 null 转换为 String.empty

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 2016-02-26
    • 2016-05-18
    • 2015-02-04
    • 2017-03-31
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多