LINQ to SQL обрабатывает нули - PullRequest
       0

LINQ to SQL обрабатывает нули

0 голосов
/ 03 сентября 2010

Как лучше всего обращаться с нулевыми значениями в Linq.

У меня есть этот код, который извлекает контакты клиентов из БД, но если контактные данные не существуют, он создает новый экземпляр

void SetProperty(int _CustomerID)
{
    Contacts_GetResult Contact;
    if (Global.VariableStore._Contact == null)
    {
        Contact = Cd.Contacts_Get(_CustomerID).SingleOrDefault();
        if (Contact == null)
            Contact = new Contacts_GetResult();
        Global.VariableStore._Contact = Contact;
    }
    else
    {
        Contact = Global.VariableStore._Contact;
    }

    if (Contact != null)
    {
        HomeNumber.Value = Contact.HomeNumber.ToString();
        MobileNumber.Value = Contact.MobileNumber.ToString();
        WorkNumber.Value = Contact.WorkNumber.ToString();
        EmailAddress.Value = Contact.EmailAddress.ToString();
    }

При создании новых контактов все значения равны нулю, что приводит к сбою кода ниже, так как значение равно нулю

HomeNumber.Value = Contact.HomeNumber.ToString();

Я сейчас использую:

if (Contact.HomeNumber != null)
HomeNumber.Value = Contact.HomeNumber.ToString();

Есть ли более простой способ?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Существует несколько способов, каждый из которых включает проверку на ноль в одну или другую сторону:

if (Contact.HomeNumber != null)
    HomeNumber.Value = Contact.HomeNumber.ToString();

HomeNumber.Value = (Contact.HomeNumber ?? string.Empty).ToString();

HomeNumber.Value = Contact.HomeNumber != null 
                       ? Contact.HomeNumber.ToString() 
                       : string.Empty;

Существует небольшая разница в том, что последние два образца заменят нулевое значение пустой строкой. В случае с оператором ?? с этим ничего не поделать; вся эта конструкция кода предназначена для того, чтобы убедиться, что значение не равно нулю, прежде чем работать с ним. Этот код является наиболее компактным из них, но имеет недостаток ненужных вызовов на ToString, когда HomeNumber равен null.

В случае оператора ?: этот образец можно легко изменить, чтобы он возвращал ноль вместо пустой строки:

HomeNumber.Value = Contact.HomeNumber != null 
                       ? Contact.HomeNumber.ToString() 
                       : null;
0 голосов
/ 03 сентября 2010

Я использую следующий метод расширения, чтобы (несколько) упростить защиту от нулевых экземпляров:

public static V ValueOrDefaultIfNull<T, V>(this T @this, Func<T, V> @value, V @default)
{
    return @this != null ? @value(@this) : @default;
}

Так что теперь я могу звонить так:

HomeNumber.Value = Contact.ValueOrDefaultIfNull(x => x.HomeNumber.ToString(), "N/A");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...