2014-07-14 2 views
1

Я искал здесь довольно много вопросов и не могу найти ответ в этой ситуации. Я должен делать что-то совершенно неправильное, потому что это похоже на то, что должно быть довольно простым. Если есть еще один вопрос, я не нахожу, если кто-то может указать мне в правильном направлении, я бы очень признателен.Linq query null check in источник данных

У меня есть метод Insert, который вставляет категорию guid в сообщение в блоге. Я пытаюсь вставить весь пост в блоге все сразу. Код в вопросе:

new XElement("categories", blog.categories.Select(x => new XElement("category", x))), 

и это работает, пока blog.categories не равно нулю, но когда это нулевые ошибки его. Категории блогов - это массив направляющих. Если бы это была строка, я бы поставил a ??, но это не работает ни на что другое, кроме строки.

Все подходит настолько красиво, что было бы неправильно добавить блог, затем найти его снова, проверить на нуль и, если не добавить элементы отдельно. Любые идеи были бы оценены.

ответ

3

Что значит ?? не работает для не-струнных? Да.

(blog.categories ?? new Guid[0]).Select(x => new XElement("category", x)) 

Это не самый хороший, но это, вероятно, лучше, чем какие-либо альтернативы, так как вы сказали создания экземпляра блога затем добавив этот пост-факто может быть хлопот.

Вы также можете, конечно, создавать свои категории XElement до блога:

XElement categories; 
if(blog.categories == null) 
{ 
    categories = new XElement("categories"); 
} 
else 
{ 
    categories = new XElement("categories", blog.categories.Select(x => new XElement("category", x))); 
} 

Тогда просто ссылаться categories позже вместо того, что вы делаете сейчас.

+0

Я сказал, что это не работает ни на что другое, кроме строк. – Daniel

+1

Я все еще не понимаю. Оператор '??' * работает * с любым типом NULL. Поэтому вы можете просто использовать его. Является ли код, который я дал здесь, дающий вам ошибку компилятора? –

+0

OMG! Ты, тот человек! Я боролся с этим навсегда !! Большое спасибо! – Daniel