繁体   English   中英

如何使用Regex.Replace on Property处理Linq to SQL中的空值

[英]How to deal with nulls in Linq to SQL with Regex.Replace on Property

以下代码部分来自较大的linq查询,但这是我需要帮助的部分:

KnowledgeTypeText = Regex.Replace((from categoryVersion in _Context.ArticleCategoryVersions
                                   join category in _Context.Categories
                                   on categoryVersion.CategoryID equals category.CategoryID
                                   where category.ParentID.HasValue == true
                                   && category.ParentID.Value == rootKnowledgeTypeID
                                   && categoryVersion.Version == articleLatestVersions.Version
                                   && categoryVersion.ArticleID == articleLatestVersions.ArticleID
                                   select category).First().Name, @"(\d+[\\.]?\s*)", ""),

简短的版本:查询的这一部分将获取文章的类别,但是不必具有值。 如果确实有一个值,则需要在文本开头删除编号。

当类别为nu​​ll时,我会遇到异常,因为它显然正在尝试对属性Name进行替换操作。

如何添加代码以处理Null? 返回一个空字符串是安全的,但是我不确定如何测试它并返回一个空字符串。

  • 如果由于Sequence contains no elements而导致First()失败,则替换为.FirstOrDefault()
  • 如果您得到一个值,但它为null ,然后在访问Name时对null引用失败,则使用.FirstOrDefault()?.Name
  • 如果是Name属性,则为null则使用??

     (/* query */).FirstOrDefault()?.Name ?? string.Empty 

阅读更多内容:


另外,将其像这样放在所有内联中的可读性较低(似乎在对象初始化器中甚至更多)。 首先进行查询,然后执行替换:

var result = (from categoryVersion in _Context.ArticleCategoryVersions
              join category in _Context.Categories
              on categoryVersion.CategoryID equals category.CategoryID
              where category.ParentID.HasValue &&
              category.ParentID.Value == rootKnowledgeTypeID &&
              categoryVersion.Version == articleLatestVersions.Version &&
              categoryVersion.ArticleID == articleLatestVersions.ArticleID &&
              select category).FirstOrDefault()?.Name ?? string.Empty;

KnowledgeTypeText = Regex.Replace(result, @"(\d+[\\.]?\s*)", "");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM