2014-01-24 2 views
0

Я преобразовал приложение форм Windows из .net 3.5 в .net 4. Я использую Linq для работы с данными. Теперь у меня есть некоторые проблемы с Linq, потому что в новой версии он генерирует исключение при попытке сделать запрос по нулевому набору результатов. Например (Resultset имеет тип System.Linq.IQueryable <>):Преобразование окон форм приложений из .NET 3.5 в .NET 4

var orderedResult = from d in resultSet 
        orderby d.ID descending 
        select d; 

Выдает исключение «Значение не может быть пустым», когда Resultset равно нулю. Он отлично работал в .NET 3.5. Как я могу избежать этих ошибок в .NET 4, делая наименьшее изменение кода? Есть ли какая-либо настройка, которую я могу переключить, так что, когда значение resultSet равно null, ни один запрос не выполняется, не вызывая исключения?

Проблема в том, что у меня есть тысячи утверждений, подобных приведенным выше. Если мне нужно проверить для каждого из них «если resultsSet! = Null», это будет трудное решение. В .NET версии 3.5 запрос по нулевому набору результатов просто возвращал значение null. Могу ли я сделать то же самое для .NET 4?

+0

Да, есть инструкция ** if ** для проверки значения «null» или 'not'. Это очень распространено на всех языках программирования. –

+1

_ «В .NET версии 3.5 запрос по нулевому набору результатов просто возвращал значение null« _ »- это неверно. 'from d in (IQueryable ) null select d' на .NET 3.5 также выдает сообщение' ArgumentNullException': «Значение не может быть null». Вы не просто изменили версию рамки с 3.5 до 4, так? – CodeCaster

ответ

0
if(resultSet != null) 
{ 
    //perform your action here 
} 
+1

Проблема в том, что у меня тысячи заявлений, подобных тому, что было в моем первом сообщении. Если мне нужно проверить каждый из них, если resultsSet! = Null, это будет трудным решением. В .NET версии 3.5 запрос по нулевому набору результатов просто возвращал значение null. Могу ли я сделать то же самое для .NET 4? – user3230553

0

Давайте вызвать метод null!

public static IEnumerable<TEntity> EmptySetIfNull(this IEnumerable<TEntity> enumerable) 
{ 
    if(null == enumerable) 
    { 
     return new TEntity[] { }; 
    } 

    return enumerable; 
} 

использование:

IEnumerable<ClassA> resultSet = null; 

var orderedResult = from d in resultSet.EmptySetIfNull() 
        orderby d.ID descending 
        select d; 
2

Я уверен, что если был null ResultSet в .NET 3.5 он будет бросать исключение, а также. LINQ - синтаксический сахар на множестве методов расширения. Когда объект null, методы расширения недоступны. Вы должны оценить изменения в своем DAL. Если, например, вы используете LINQ to SQL, могут быть некоторые изменения, которые относятся к вам: http://damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40.

Смежные вопросы