2013-06-20 2 views
2

Привет У меня есть следующий запрос, т.е.проверка Linq, если значение существует иное установлено значение по умолчанию

public int GetDefaultCurrencyForOrganization(string organizationId) 
    { 
     return (from a in _dataContext.allocations 
       where a.organizationId.Equals(organizationId) 
       select a.currencyId).SingleOrDefault(); 
    } 

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

+0

Итак, вы хотите вернуть '4', если запрос ничего не возвращает? – Rob

ответ

2

Я думаю, что вы ищете что-то вроде этого:

public int GetDefaultCurrencyForOrganization(string organizationId) 
{ 
    return (from a in _dataContext.allocations 
      where a.organizationId.Equals(organizationId) 
      select (int?)a.currencyId).SingleOrDefault() ?? 4; 
} 

Вы также могли бы сделать это:

public int GetDefaultCurrencyForOrganization(string organizationId) 
{ 
    var alloc = _dataContext.allocations 
     .SingleOrDefault(a => a.organizationId.Equals(organizationId)); 
    return alloc != null ? alloc.currencyId : 4; 
} 
2

Попробуйте DefaultIfEmpty (4) вместо SingleOrDefault указать значение .:

public int GetDefaultCurrencyForOrganization(string organizationId) 
{ 
    return (from a in _dataContext.allocations 
      where a.organizationId.Equals(organizationId) 
      select a.currencyId).DefaultIfEmpty(4).Single(); 
} 

http://msdn.microsoft.com/en-us/library/bb355419.aspx

+0

Получение ошибки при использовании этой неподдерживаемой перегрузки, используемой для оператора запроса по умолчанию, если пусто – StevieB

+0

Вместо Single() вы можете попробовать использовать First()? –

+0

Какой тип 'currencyId'? Если это строка типа 'organizationId', то вам, скорее всего, понадобится строковый литерал« 4 »вместо целочисленного 4 константы. – devgeezer

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