Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linq to Entities查询中将空值替换为默认值_Linq_Linq To Entities - Fatal编程技术网

在Linq to Entities查询中将空值替换为默认值

在Linq to Entities查询中将空值替换为默认值,linq,linq-to-entities,Linq,Linq To Entities,在下面的Linq to Entities查询中,如果查询返回0个OfficeTelephone对象,我需要在返回值的x.Number中放置一个默认值。我试过了 x、 编号??“555-1212”,但这会引发一个错误 from c in Contacts .Where(a => a.LastName.Contains("ANDUS")).Take(10) select new

在下面的Linq to Entities查询中,如果查询返回0个OfficeTelephone对象,我需要在返回值的x.Number中放置一个默认值。我试过了 x、 编号??“555-1212”,但这会引发一个错误

 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()

使用
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)

如果查询返回0个对象,x.Number永远不会被使用…您是否尝试将OfficeTelephone设置为默认值?是的,设置为默认对象,具有区号、号码等的默认值。该假设是正确的。当我这样做时,我得到了错误:实例参数:无法从“System.Collections.Generic.IEnumerable”转换为“System.Linq.iqueryable”。基本上它说,您正在尝试将匿名列表键入电话列表,所以只需删除匿名列表,即查看我的更新答案。试试看