Вопрос о проекции Linq - PullRequest
       27

Вопрос о проекции Linq

1 голос
/ 02 апреля 2010

Я пытаюсь сделать следующее:

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 имеют значение null, свойство City возвращает значение null. Как я могу поместить функцию рядом с этим объявлением 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";
   }
}

1 Ответ

4 голосов
/ 02 апреля 2010

Использовать оператор объединения нулей? Если значение слева от ?? имеет значение 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, чтобы сузить требования к пропускной способности.

...