Mat*_*ius 3 .net c# linq entity-framework
我正在与C#, .NET4.5, EF6(实际上应该不重要)。
我从数据库中选择一些值,然后.ToList()添加它们,DefaultIfEmpty(new ActualFee{Net = 0, Vat = 0})如果不存在则添加,然后我得到null
public static ConveyancingSummaryVm ToConveyancingSummaryVm(this Tuple<IEnumerable<ActualFee>, ConveyancingAnswer, Customer> conveyancePricingAnswersAndCustomer)
{
var purchaseFees = conveyancePricingAnswersAndCustomer.Item1.Where(o => o.ConveyancingSaleType == "Purchase").ToList();
if (purchaseFees.Any())
{
var discount = purchaseFees.DefaultIfEmpty(new ActualFee{Net = 0, Vat = 0}).SingleOrDefault(o => o.Title.Contains("Discount"));
conveyancingSummaryVm.IsPurchaseFreehold = conveyancePricingAnswersAndCustomer.Item2.PropertyBoughtIsFreehold;
...
Run Code Online (Sandbox Code Playgroud)

我一定在这里遗漏了一些明显的东西。
在这种情况下没有办法DefaultIfEmpty返回 null。当没有元素时,它返回一个ActualFee实例并且Title不包含Discount。这就是SingleOrDefault返回的原因null。
所以你是说 DefaultIfEmpty 不适用于 SingleOrDefault ?
不,DefaultIfEmpty可以工作并返回预期值。然后SingleOrDefault运行返回值DefaultIfEmpty并返回null,因为序列中没有满足您的条件的元素。
您可以使用空合并运算符来获得您想要的行为:
var discount = purchaseFees.FirstOrDefault(o => o.Title.Contains("Discount"))
?? new ActualFee{Net = 0, Vat = 0};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6516 次 |
| 最近记录: |