【问题标题】:object not set to an instance of an object using lambda expression未使用 lambda 表达式将对象设置为对象的实例
【发布时间】:2011-07-29 00:27:49
【问题描述】:

我使用带有 where 条件的 lambda 表达式来获取地址集合的计数。 一些addresscollection 对象有空值。出于某种原因,我得到的对象未设置为对象的实例。当我深入研究异常时,我发现返回类型为 {Name = "Boolean" FullName = "System.Boolean"} 并返回参数 {Boolean}。关于如何处理此异常的任何想法。 这是我使用的 lambda 表达式:

var codes = (addresscollection.Where(n => n.Code.Contains("A") || n.Code.Contains("S") || n.Code.Contains("Q"))).Count()

【问题讨论】:

    标签: linq lambda


    【解决方案1】:

    集合为空或其中一个代码为空。

    var codes = addresscollection == null ? 0 :
                addresscollection.Count(n => n.Code != null && (
                                             n.Code.Contains("A") ||
                                             n.Code.Contains("S") ||
                                             n.Code.Contains("Q")));
    

    【讨论】:

    • 在地址集合中,我有 1000 条记录,其中一些代码为空,但想获取为空的代码计数和具有 A、S、Q 的代码计数。跨度>
    • 吉米,非常感谢您的回复,它确实解决了我的问题。我是 lambda 表达式的新手。您能否解释一下代码 addresscollection == null 是什么? 0 : 在您的回复中表示。
    • 那个? : 是 C# 中的“IIF”运算符。它是一个三元运算符,其中第一部分是“if”语句,第二部分是 true 时的返回值,第三部分是 false 时的返回值。在这种情况下,它表示如果集合为空,则 codes 将为零,否则它将是该行其余部分的结果。
    【解决方案2】:

    如果这是引发异常的行,则 addressCollection 本身为 null,或者它包含 null 元素,或者其中一个元素在 Code 属性中包含 null。

    【讨论】:

    • addresscollection 中有一些元素为空。
    • 然后添加到吉米的答案,它必须是这样的:var codes = addresscollection == null ? 0 : addresscollection.Count(n => n != null && n.Code != null && (n.Code.Contains("A") || n.Code.Contains("S") || n.Code.Contains("Q"))); 这将确保集合本身不为空,并在尝试查看之前检查每个元素是否为空代码。
    • 我想知道 addresscollection.Where(n => n.Code.Contains("A") || n.Code.Contains("S") || 之间有什么区别n.Code.Contains("Q"))).Count() ** 和 **addresscollection.Count(n => n != null && n.Code != null && (n.Code.Contains("A" ) || n.Code.Contains("S") || n.Code.Contains("Q")));
    • 对于您的场景,假设您只是在处理对象,我知道没有区别。我认为当你为你的 LINQ 做一个数据库提供程序时可能会有所不同——它可能会生成不同的 SQL,但我什至不确定——我猜可能不会。我一直认为 .Where 会有所帮助,而不是将您的 lambda 放入 .Count,但这只是个人喜好。在我的评论中,我从 Jimmy 的代码开始,这就是我保持原样的原因。
    猜你喜欢
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多