在Linq to Entities查询中将空值替换为默认值
在下面的Linq to Entities查询中,如果查询返回0个OfficeTelephone对象,我需要在返回值的x.Number中放置一个默认值。我试过了 x、 编号??“555-1212”,但这会引发一个错误在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
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”。基本上它说,您正在尝试将匿名列表键入电话列表,所以只需删除匿名列表,即查看我的更新答案。试试看