[英]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*)", ""),
简短的版本:查询的这一部分将获取文章的类别,但是不必具有值。 如果确实有一个值,则需要在文本开头删除编号。
当类别为null时,我会遇到异常,因为它显然正在尝试对属性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.