如何在具有相关数据的 属性 上将空检查函数放入匿名函数中

how to put null check function inside anonymous function on a property with related data

这是我的 属性,我正在 return 从匿名函数返回:

var ret = new
{
    TagName = String.Join( ",", post.Tags.Select( t => t.TagName ) )
};

这里,post和tag是多对多的关系,意思是一个post可以有多个tag。

我想在此处进行空检查,如果有任何标签,则 return 后退逗号分隔,否则 return 空字符串。

到目前为止,我尝试了很多方法来像这样进行空检查,但没有得到准确的语法:

 TagName = String.Join( ",", post.Tags.Select( t => t.TagName ) + ( post.Tags != null ? '' ) )

如果是简单的字符串,我可以这样得到:

alert( post.username != null ? ' ' + post.username : '') )

如果我没理解错的话,你想连接标签,但如果没有标签那么 return 一个空字符串?我还假设您也想忽略 post.Tags 的空(或空)成员?

var ret = new {
    TagName = ( post.Tags == null || post.Tags.Length == 0 ) ?
        String.Empty :
        String.Join( ",",
            post.Tags
                .Where( t => t != null && !String.IsNullOrWhiteSpace( t.TagName ) )
                .Select( t => t.TagName )
        )
};

尝试这样的事情

TagName = post.Tags != null ? String.Join(",", post.Tags.Select( t => t.TagName ) ) : ""

并检查这个 link 关于三元运算符 https://msdn.microsoft.com/en-us/library/zakwfxx4(v=vs.90).aspx

基于 this 相关 post 中的解决方案。你可以这样做

var ret = new
{
    var tags = post.Tags.OrEmptyIfNull();
    TagName = String.Join( ",", tags.Select( t => t.TagName ) )
};

OrEmptyIfNull 基本上是对空合并运算符 ?? 的包装,但我发现分解版本更容易阅读。因为如果集合为空,String.Join 将生成一个空字符串,您可以简单地传递标签,知道它永远不会为 null

你可以使用这样的东西:

var test = {
     TagNames= post.Tags!=null && post.Tags.Any() ? String.Join(",", post.Tags.Select(x=>x.TagName) : ""
}