2016-01-14 2 views
0

Это мое имущество, которое я возвращаюсь назад из анонимной функции:как поставить нулевую функцию проверки внутри анонимной функции на свойстве с соответствующими данными

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 : '')) 

ответ

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

+0

хорошо это работает, но я могу принять он после 2 минут thnk u @suvroc – duke

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) 
     ) 
}; 
1

На основе решения в this связанных пост. Вы можете сделать это

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

OrEmptyIfNull в основном обертка вокруг оператора нулевой коалесценции ??, но я считаю, что легче читать, что взорванного версии. Поскольку String.Join будет производить пустую строку, если коллекция пуста вы можете просто передать тег в, зная, что он никогда не был нулевым

+0

thnks для ответа, один вопрос - по производительности мудрый, этот один строковый код будет быстрее или urs, я не знаю много, поэтому просто спрашивайте @Rune Fs TagName = post.Tags! = null? String.Join (",", post.Tags.Select (t => t.TagName)): "" – duke

+0

Я бы сказал, что очень вероятно, что a) Разница будет трудно обнаружить для пользователя. B) Она может вероятно, оптимизируется на тот же двоичный код оптимизатором. Ака это приведет к тому же или, по крайней мере, очень похожим набором машинных команд без разницы во времени выполнения. В целом предпочитают читаемость к производительности. Если есть проблема с производительностью, вы можете решить эту проблему. Однако читаемый код означает более производительные команды. Более продуктивные команды имеют больше времени для оптимизации, когда оптимизация действительно ценна для продукта –

1

Вы могли бы использовать что-то вроде этого:

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