另一个快速的问题.
我有这个简单的方法:
我有这个简单的方法:
#region Fields private Collection<Address> _addresses; #endregion #region Public methods public Address DeliveryAddress() { if (_addresses == null) if (this.Id > 0) _addresses = Core.Data.Addresses.GetClient(this.Id); return _addresses.SingleOrDefault(x => x.TypeId == AddressType.Delivery); } public Address InvoiceAddress() { if (_addresses == null) if (this.Id > 0) _addresses = Core.Data.Addresses.GetClient(this.Id); return _addresses.SingleOrDefault(x => x.TypeId == AddressType.Invoice); } #endregion
正如你所看到的,我试图返回一个DeliveryAddress的结果和一个InvoiceAddress的结果.我的问题是,如果SingleOrDefault返回null,我希望链接表达式创建一个新的Address()实例.
我对linq真的很新,所以我不知道SingleOrDefault是否是正确的表达式我应该使用.
解决方法
您可以使用
DefaultIfEmpty
并将该实例用作默认值:
return _addresses.Where(x => x.TypeId == AddressType.Delivery) .DefaultIfEmpty(new Adress()) .Single();