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

时间:2016-01-14 08:32:25

标签: c# asp.net-mvc anonymous-function

这是我从匿名函数返回的属性:

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

这里,帖子与标签有多对多的关系意味着帖子可以有多个标签。

我想在这里检查null,如果有任何标记然后返回逗号分隔,否则返回空字符串。

到目前为止,我尝试了许多方法来对此进行无效检查,但没有得到确切的语法:

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

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

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

4 个答案:

答案 0 :(得分:3)

尝试这样的事情

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

并查看此链接有关trensry操作员的信息 https://msdn.microsoft.com/en-us/library/zakwfxx4(v=vs.90).aspx

答案 1 :(得分:1)

如果我理解正确,你想连接标签,但如果没有标签,那么返回一个空字符串?我还假设你想忽略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 )
        )
};

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

您可以使用以下内容:

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