2010-04-02 2 views
1

Я пытаюсь сделать следующее:Linq Проекция Вопрос

from c in db.GetAllContactsQuery() 
select new 
{ 
    ID= c.ID, 
    LastName = c.LastName, 
    FirstName = c.FirstName, 
    Email = c.Email, 
    City =c.City+" "+c.State 
} 

Проблема я бегу в том, что если c.City или c.State равны нулю, то свойство Город возвращает нуль. Как я могу поместить функцию рядом с этим объявлением City=?

Я действительно хотел бы знать, если его можно сделать что-то вроде этого (это не работает):

from c in db.GetAllContactsQuery() 
select new 
{ 
    ID= c.ID, 
    LastName = c.LastName, 
    FirstName = c.FirstName, 
    Email = c.Email, 
    City ={ c=> 
     //completely sweet function in here 
     if(String.IsNullOrEmpty(c.City)) 
       return "booyah"; 
    } 
} 

ответ

4

Используйте пустой оператор коалесцирующий? Если значение слева от? имеет значение null, оно заменяется значением справа.

from c in db.GetAllContactsQuery() 
select new 
{ 
    ID= c.ID, 
    LastName = c.LastName, 
    FirstName = c.FirstName, 
    Email = c.Email, 
    City =(c.City??"")+" "+(c.State??"") 
} 

В ответ на ваш комментарий, вы должны использовать AsEnumerable, так что вы можете использовать полный CLR благость:

db.GetAllContactsQuery() 
    .AsEnumerable() 
    .Select(c=>new 
     { 
      ID= c.ID, 
      LastName = c.LastName, 
      FirstName = c.FirstName, 
      Email = c.Email, 
      City =MyClrMethod(c.City,c.State) 
     }) 

Если db.GetAllContactsQuery() возвращает множество дополнительных полей, выберите те, представляющий интерес до пункта к AsEnumerable узкие требования к пропускной способности.

+0

Я считаю, что вы правы, но есть ли способ открыть здесь функцию, на случай, если я захочу сделать еще немного логики? Например, специальное форматирование, основанное на стране, в которой они живут, – Micah

+0

Является ли этот Linq объектами или Linq2SomethingElse? – spender

+0

Сбой от LinqToSql – Micah