2015-07-28 5 views
0

Пожалуйста, проверьте ниже код, так как мой вопрос связан с следующим примером.Linq Filter - After Filter Ожидающий результат должен быть ничем

Dim objPOSMaxDiscountTemplateDetailList As POSMaxDiscountTemplateDetailList 
objPOSMaxDiscountTemplateDetailList = _ 
    POSMaxDiscountTemplateDetailList.GetPOSMaxDiscountTemplateDetailList(UserDiscountPolicyTemplateCode) 

'Filtering Above List 
Dim Data = (From p In objPOSMaxDiscountTemplateDetailList _ 
        Where p.ItemTypeCode = ItemTypeCode) 

If Data IsNot Nothing Then 
    '' Do Something 
End If 

В приведенном выше примере объект objPOSMaxDiscountTemplateDetailList получает 14 записей. После этого я фильтрую эту запись с условием ItemTypeCode и нет сопоставленной записи с ItemTypeCode. Поэтому я ожидаю, что объект Data будет ничем. Но в то время как отладка я обнаружил, что объект Data не является ничем, и data.count am получает 0.

Я не понимаю этого поведения, так же, как и тот же тип кодирования, я сделал еще один класс, который отлично работает в соответствии с моим ожиданием.

Спасибо.

+0

Предположим, что вы инициализирован объект списка, как этот: Dim MyList как новый список (из Integer). Список изначально не является ничем и содержит нулевые целые числа. Это то, что linq возвращает, когда фильтр не находит никаких результатов. – jdweng

ответ

0

Это не будет Nothing. Это будет пустая коллекция. Запрос LINQ to Objects почти никогда не возвращает Nothing.

Попробуйте

If Not Data.Any() Then 
    '' Do Something 
End If 
+0

Что значит почти? В каком случае я ничего не получу? – Snehal

+0

Если вы, например, 'Enumerable.Repeat (" null ", 10) .First();' или использовать 'FirstOrDefault/SingleOrDefault' в коллекции ссылочного типа, в которой нет элементов. Таким образом, запросы, возвращающие отдельные элементы, могут возвращать 'null'. Любой запрос, возвращающий несколько элементов, будет возвращать пустую коллекцию вместо «null», когда ничего не вернуть. – MarcinJuraszek

+0

Как я уже ранее возвращал, что какой-то класс работает нормально, я использовал «SingleOrDefault» и, следовательно, возвращал «Nothing». Спасибо MarcinJuraszek .. !!! – Snehal