开发者

Linq Projection Question

开发者 https://www.devze.com 2022-12-25 17:15 出处:网络
I\'m trying to do the following: from c in db.GetAllContactsQuery() select new { ID= c.ID, LastName = c.LastName,

I'm trying to do the following:

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

The issue i'm running into is that if c.City or c.State are null, the City property returns null. How can I put a function right beside that City= declaration?

I'd really like to know if its possible to do something like this (this does not work):

from c in db.开发者_C百科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";
   }
}


Use a null coalescing operator? If the value on the left of ?? is null, it is substituted for the value on the right.

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

In answer to your comment, you need to use AsEnumerable so you can use full CLR goodness:

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

If db.GetAllContactsQuery() returns many additional fields, select the ones of interest before the AsEnumerable clause to narrow bandwidth requirements.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号