Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Regex.Replace on属性处理Linq to SQL中的空值_C#_Regex_Linq_Linq To Sql - Fatal编程技术网

C# 如何使用Regex.Replace on属性处理Linq to SQL中的空值

C# 如何使用Regex.Replace on属性处理Linq to SQL中的空值,c#,regex,linq,linq-to-sql,C#,Regex,Linq,Linq To Sql,以下代码部分来自一个更大的linq查询,但我需要帮助: KnowledgeTypeText = Regex.Replace((from categoryVersion in _Context.ArticleCategoryVersions join category in _Context.Categories on categoryVersion.Cate

以下代码部分来自一个更大的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*)", ""),
简短版本:查询的这一部分将获取文章的类别,但不一定要有值。如果它确实有一个值,我需要去掉文本开头的编号

当类别为null时会出现异常,因为它显然试图对属性名执行替换操作

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

  • 如果由于
    序列不包含任何元素而导致
    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*)", "");

你真的需要内联吗?为什么不直接提取select,然后在其上执行
FirstOrDefault
,如果该值不为null,则进行替换?是否为
category
null?或者它是
Name
property
null
?或者序列中没有项目?可能重复@Graham-编辑没有问题,但现在答案的第一部分缺少重要信息。只是删除链接真丢脸……我没有看到任何其他的解释,我认为这是免费的信息,不重要。由于我们正在编辑,我们知道原始作者将得到通知,以便您可以回来,并根据您认为合适的方式进行改进。我倾向于同意@GiladGreen的观点,在这一点上,编辑是不必要的,删除的链接实际上对答案的来源至关重要。