另一个快速问题.我有这个简单的方法:
#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
Run Code Online (Sandbox Code Playgroud)
正如你可以看到我试图返回的一个结果DeliveryAddress,并为一个结果InvoiceAddress.我的问题是我希望链接表达式创建Address()if SingleOrDefault返回的新实例null.我对linq很新,所以我不确定SingleOrDefault我应该使用的是正确的表达式.
Tim*_*ter 27
您可以使用DefaultIfEmpty该实例作为默认值:
return _addresses.Where(x => x.TypeId == AddressType.Delivery)
.DefaultIfEmpty(new Adress())
.Single();
Run Code Online (Sandbox Code Playgroud)
Oli*_*bes 13
return _addresses
.SingleOrDefault(x => x.TypeId == AddressType.Delivery) ?? new Address();
Run Code Online (Sandbox Code Playgroud)
表达方式
x ?? y
Run Code Online (Sandbox Code Playgroud)
否则,x如果x不是null,则收益率y.您可以链接运营商
x ?? y ?? z ?? t
Run Code Online (Sandbox Code Playgroud)
这将返回第一个非null值,或者null全部返回值null.
UPDATE
请注意,SingleOrDefault如果序列具有多个元素,则会引发异常.如果您需要序列的第一个元素可能没有或多个元素,请FirstOrDefault改用.
| 归档时间: |
|
| 查看次数: |
20082 次 |
| 最近记录: |