В System.Linq.Dynamic.Select(), как простым способом справиться с нулевой ссылкой на объект?

Я использую динамический LINQ (System.Linq.Dynamic) (вы можете найти описание здесь, http://dynamiclinq.azurewebsites.net/GettingStarted).

Следующее утверждение работает хорошо

Products.Select("new(ProductName, CategoryID.CategoryName as CategoryName)");

Но я случайно обнаружил, что когда CategoryID равен нулю, результаты пусты. Но я предполагал, что он вернет такую ​​запись, как:

ProductName="Wine", CategoryName="" (или null).

Затем я нашел способ сделать это

Products.Select("new(ProductName, iif(CategoryID==null,\"\",CategoryID.CategoryName) as CategoryName)");

Заявление некрасивое.

У вас есть лучшее решение?

Заранее спасибо,


person Ying    schedule 20.05.2015    source источник
comment
new(ProductName, CategoryID==null?null:CategoryID.CategoryName) as CategoryName) работал. Как упомянул Кори, использование null кажется немного проще и более общим.   -  person Ying    schedule 20.05.2015
comment
Более уродливый пример: grand==null?null:(grand.parent==null?null:grand.parent.son).   -  person Ying    schedule 20.05.2015


Ответы (1)


Единственное, что я нашел, это здесь. Непонятно, почему решение было принято, но я увидел, что вы можете сделать это:

"new(ProductName, iif(CategoryID==null,null,CategoryID.CategoryName) as CategoryName)"

вместо этого:

"new(ProductName, iif(CategoryID==null,\"\",CategoryID.CategoryName) as CategoryName)"

Это не короче, но для меня это делает код немного более читаемым, потому что вы просто используете null вместо экранирования кавычек.

person Cory    schedule 20.05.2015
comment
new(ProductName, CategoryID==null?null:CategoryID.CategoryName) as CategoryName) - person Ying; 20.05.2015