【发布时间】:2015-02-03 11:44:03
【问题描述】:
我正在与C#、.NET4.5、EF6(应该不重要)合作。
我从 db 中选择一些值,然后 .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;
...
我必须在这里遗漏一些明显的东西。
【问题讨论】:
-
很可能 SingleOrDefault 返回 null。
-
见上面的评论——还有,为什么使用 DefaultIfEmpty 和 Any()——如果你有 'Some',它可能不能为空。
-
@Selman22 所以你是说
DefaultIfEmpty不适用于SingleOrDefault? -
您的问题实际上很有意义,因为该方法建议“如果为空,则返回此默认值”...我不明白为什么 SingleOrDEFAULT 没有检索您建议的默认值。如果您的列表为 EMPTY(非空),您的场景可能会起作用,例如 Count=0... 在这种情况下,我认为它会返回您的默认值。
标签: c# .net linq entity-framework