【问题标题】:Linq query null check in data source数据源中的Linq查询空检查
【发布时间】:2014-09-03 20:50:27
【问题描述】:

我在这里搜索了很多问题,但在这种情况下找不到答案。我一定是在做完全错误的事情,因为这看起来应该相当简单。如果还有其他问题,我不知道是否有人可以为我指出正确的方向,我将不胜感激。

我有一个将类别 guid 插入博客文章的 Insert 方法。我正在尝试一次插入整个博客文章。有问题的代码是:

new XElement("categories", blog.categories.Select(x => new XElement("category", x))),

只要 blog.categories 不为空,它就可以工作,但是当它为空时,它会出错。博客类别是一个 guid 数组。如果它是一个字符串,我会放一个 ??,但这不适用于除字符串之外的任何其他内容。

一切都非常合适,添加博客似乎是错误的,然后再次找到它,检查是否为空,如果不单独添加元素。任何见解将不胜感激。

【问题讨论】:

    标签: c# asp.net xml linq xelement


    【解决方案1】:

    ?? 不适用于非字符串是什么意思?是的。

    (blog.categories ?? new Guid[0]).Select(x => new XElement("category", x))
    

    这不是最好的,但它可能比任何替代品都好,因为正如你所说,创建博客的实例然后添加这个事后可能会很麻烦。

    当然,您也可以在博客之前创建类别 XElement:

    XElement categories;
    if(blog.categories == null)
    {
        categories = new XElement("categories");
    }
    else
    {
        categories = new XElement("categories", blog.categories.Select(x => new XElement("category", x)));
    }
    

    那么稍后只需引用categories 来代替您现在所做的。

    【讨论】:

    • 我还是不明白。 ?? 运算符确实适用于任何可为空的类型。所以你可以使用它。我在这里给你的代码是不是给你一个编译器错误?
    • 天哪!你那个男人!!我一直在为此挣扎!!非常感谢!
    • 我不知道我从哪里得到它不适用于其他类型。我猜我只是做得不好。
    • 只是为了澄清我一直遇到的问题,以防万一有人遇到与我相同的挂断问题,这可能对他们有所帮助,因为它对我有所帮助。再次感谢马修。我正在输入 new XElement("categories", blog.categories.Select(x => new XElement("category", x)) ?? new Guid[0]),就好像它是一个像 new XElement(" readmoretext", blog.readmoretext ?? ""),它是错误的,所以我只是假设它不会工作。我应该多花点心思研究一下。它会节省大量的恶化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多