2014-10-10 90 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