2014-10-10 94 views
0

在下面的Linq to Entities查詢中,如果查詢返回0 OfficeTelephone對象,則需要在返回值中的x.Number中放置一個默認值。我試過 x.Number ??「555-1212」,但是會引發錯誤。使用Linq to Entities查詢中的默認值替換空值

from c in Contacts 
        .Where(a => a.LastName.Contains("ANDUS")).Take(10) 
         select new 
         { 
         Id = c.Id, 
         OfficeTelephone = c.Telephones.Where(a=>a.TelephoneType.Name.Contains("Office")).Select(x => new { x.AreaCode, x.Number, x.TelephoneType, x.Primary }) 
         } 

我已經試過類似:

from c in Contacts 
        .Where(a => a.LastName.Contains("ANDUS")).Take(10) 
         select new 
         { 
         Id = c.Id, 
         OfficeTelephone = c.Telephones 
.Where(a=>a.TelephoneType.Name.Contains("Office")) 
.Select(x => new { x.AreaCode, x.Number, x.TelephoneType, x.Primary }) 
.DefaultIfEmpty()} 

但我不知道如何把一個默認的對象爲DefaultIFEmpty()

+0

如果查詢返回0的對象,是從未使用過x.Number ......你想OfficeTelephone設爲默認值? – Aducci 2014-10-10 16:12:20

+0

是默認對象,區域代碼,數字等缺省值。 – 2014-10-10 16:56:14

回答

0

使用DefaultIfEmpty,並通過默認實例與那些默認情況下你會想要的值,即如果沒有行被返回。

嘗試這樣的:

Contacts.Where(a=>a.LastName.Contains("ANDUS")) 
     .Take(10) 
     .Select(x => new 
     { 
      Id = x.Id, 
      OfficeTelephone = x.Telephones 
           .Where(a=> a.Telephone.Name.Contains("Office")) 
           .Select(b=> new Telephone 
           { 
            b.AreaCode, 
            b.Number, 
            b.TelephoneType, 
            b.Primary 
           }) 
           .DefaultIfEmpty(new Telephone()) 
     }); 

在那裏我已經假定typeof(x.Telephones) == typeof(List<Telephone>)

+0

該假設是正確的。當我這樣做時,我得到的錯誤:實例參數:不能從'System.Collections.Generic.IEnumerable '轉換爲'System.Linq.IQueryable 2014-10-10 18:20:19

+0

基本上它說,你試圖給一個匿名列表到電話列表,所以只需刪除您的匿名列表,即看到我更新的答案。試試看 – 2014-10-10 18:22:22