2010-04-02 5 views
1

Je suis en train de faire ce qui suit:LINQ Projection Question

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

La question que je suis en cours d'exécution en est que si c.City ou c.State sont nuls, la propriété Ville renvoie null. Comment puis-je mettre une fonction juste à côté de cette déclaration City=?

Je voudrais vraiment savoir s'il est possible de faire quelque chose comme ça (cela ne fonctionne pas):

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"; 
    } 
} 

Répondre

4

Utilisez un opérateur coalescent null? Si la valeur sur la gauche de ?? est nul, il est substitué à la valeur sur la droite.

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

En réponse à votre commentaire, vous devez utiliser AsEnumerable afin que vous puissiez utiliser la bonté complète 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) 
     }) 

Si db.GetAllContactsQuery() retourne plusieurs champs supplémentaires, sélectionnez ceux d'intérêt avant la clause AsEnumerable à exigences de bande passante étroite.

+0

Je crois que vous avez raison, mais est-il possible d'ouvrir une fonction ici, au cas où je voudrais faire plus de logique? Tels que le formatage spécial basé sur le pays dans lequel ils vivent – Micah

+0

Est-ce Linq to Objects ou Linq2SomethingElse? – spender

+0

Son fonctionnement de LinqToSql – Micah