簡體   English   中英

如何防止列表中的項目在未填寫時返回“0”並且它們應該為“null”?

[英]How to prevent items in a list returning “0” when not filled in and they supposed to be “null”?

這是一個很難問的問題,但這是我的問題:

我正在使用從不同類獲得的數據填充網格,該類使用可以表示多個模型的(通用)模型:

型號(可代表Vessel 或Container):

public class DataGridInstallationRow
{
    [Key]
    public string Name { get; set; }

    //Vessel
    public int IMO { get; set; }
    public int MMSI { get; set; }
    public int EEOI { get; set; }
    public int FOC { get; set; }

    [Display(Name = "Total Fuel Mass")]
    public int TotalFuelMass { get; set; }

    [Display(Name = "Average Speed")]
    public int AverageSpeed { get; set; }

    [Display(Name = "Total Distance Sailed")]
    public int TotalDistanceSailed { get; set; }

    //Container
    [Display(Name = "Generated by Sun")]
    public int EnergyGeneratedBySun { get; set; }
    [Display(Name = "Generated by Wind")]
    public int EnergyGeneratedByWind { get; set; }
    [Display(Name = "Generated by Generator")]
    public int EnergyGeneratedByGenerator { get; set; }
    [Display(Name = "Consumed by EV's")]
    public int EnergyConsumedByEV { get; set; }
    [Display(Name = "Consumed by Construction Site")]
    public int EnergyConsumedByConstructionSite { get; set; }
}

此模型用於我的提供程序:

        if (fleet.Type.Equals("Container"))
        {
            return Enumerable.Range(0, 10).Select(i => new DataGridInstallationRow()
            {
                Name = $"Container {i}",
                EnergyGeneratedBySun = 13,
                EnergyGeneratedByWind = 19,
                EnergyGeneratedByGenerator = 3,
                EnergyConsumedByEV = 15,
                EnergyConsumedByConstructionSite = 24
            }).ToList();
        }
        else
        {
            return Enumerable.Range(0, 10).Select(i => new DataGridInstallationRow()
            {
                Name = $"Vessel {i}",
                IMO = 231,
                MMSI = 1344,
                EEOI = 8121,
                FOC = 123,
                TotalFuelMass = 6817,
                AverageSpeed = 14,
                TotalDistanceSailed = 1560
            }).ToList();
        }

如您所見,根據 Fleet.Type,填充另一個。如果 Fleet.Type 是容器,則對象將如下所示:

在此處輸入圖片說明

正如您所看到的,“Vessel”的屬性也全部填充為“0”,我希望它們為空而不是“0”,因為我的數據網格現在填充了兩種模型:

在此處輸入圖片說明

避免和解決此問題的最佳做法是什么?

更新

Dogac的應用解決方案:

if (fleet.Type.Equals("Container"))
        {
            return Enumerable.Range(0, 10).Select(i => new DataGridInstallationRow()
            {
                Name = $"Container {i}",
                EnergyGeneratedBySun = 13,
                EnergyGeneratedByWind = 19,
                EnergyGeneratedByGenerator = 3,
                EnergyConsumedByEV = 15,
                EnergyConsumedByConstructionSite = 24
            }).Where(row =>
            {
                return row.EnergyGeneratedBySun.HasValue &&
                       row.EnergyGeneratedByWind.HasValue &&
                       row.EnergyGeneratedByGenerator.HasValue &&
                       row.EnergyConsumedByEV.HasValue &&
                       row.EnergyConsumedByConstructionSite.HasValue;
            }).ToList();
        }
        else
        {
            return Enumerable.Range(0, 10).Select(i => new DataGridInstallationRow()
            {
                Name = $"Vessel {i}",
                IMO = 231,
                MMSI = 1344,
                EEOI = 8121,
                FOC = 123,
                TotalFuelMass = 6817,
                AverageSpeed = 14,
                TotalDistanceSailed = 1560
            }).Where(row =>
            {
                return row.IMO.HasValue &&
                       row.MMSI.HasValue &&
                       row.EEOI.HasValue &&
                       row.FOC.HasValue &&
                       row.TotalFuelMass.HasValue &&
                       row.AverageSpeed.HasValue &&
                       row.TotalDistanceSailed.HasValue;
            }).ToList();
        }   

仍然無法正常工作,我再次收到一個包含可為空項目的列表。

提前致謝

嘗試使所有屬性都可以為空。

像這樣:

// Vessel
public int? IMO { get; set; }
public int? MMSI { get; set; }
public int? EEOI { get; set; }
public int? FOC { get; set; }

編輯評論:

Enumerable.Range(0, 10).Select(i => new DataGridInstallationRow()
            {
                Name = $"Vessel {i}",
                IMO = 231,
                MMSI = 1344,
                EEOI = 8121,
                FOC = 123,
                TotalFuelMass = 6817,
                AverageSpeed = 14,
                TotalDistanceSailed = 1560
            }).Where(row =>
            {
                return row.IMO.HasValue && 
                       row.MMSI.HasValue && 
                       row.EEOI.HasValue && 
                       row.FOC.HasValue && 
                       row.TotalFuelMass.HasValue && 
                       row.AverageSpeed.HasValue && 
                       row.TotalDistanceSailed.HasValue;
            }).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM