首页 > 解决方案 > C# 类没有为 LINQ 查询传递值

问题描述

希望这是有道理的。我有一个名为ShippingCont

在这堂课中,我有一个如下所示的 LINQ 连接。我想使用这个类来调用给定的表并获取所有必要的字段,而不是调用数据库的单个查询。

    public static ShippingContainerDataContext shippingContainer = new ShippingContainerDataContext();

    public static SHIPPING_CONTAINER sc2 = shippingContainer.SHIPPING_CONTAINERs.FirstOrDefault(a => a.CONTAINER_ID == _externalContainerId);


    private string _containerId = sc2.COMPANY;
    private string _company = sc2.COMPANY;

    public string fromProgram
    {
        get { return _externalContainerId; }
    }

    public string ContId
    {
        get { return sc2.CONTAINER_ID; }
        set { _externalContainerId = value; }
    }


    public string _ContainerId
    {
        get { return sc2.CONTAINER_ID; }
        set { _ContainerId = value; }
    }

    public string _Company
    {
        get { return sc2.COMPANY; }
        set { _company = value; }
    }

当我尝试将值传递给_externalContainerId类中的。LINQ 查询不返回任何记录,我收到错误消息Object reference not set to an instance of an object

我知道 LINQ 会返回数据,因为当我在 LINQ 查询中手动提供容器 ID(如下所示)时,我会得到一个结果集。

public static SHIPPING_CONTAINER sc2 = shippingContainer.SHIPPING_CONTAINERs.FirstOrDefault(a => a.CONTAINER_ID == "00008878742000004419");

该值是从主程序传递的,如下所示。

ShippingCont sc = new ShippingCont("00008878742000004419");

我知道该值正在传递,因为当我调用fromProgram()该值时会打印出来。

我究竟做错了什么?

标签: c#asp.netc#-4.0

解决方案


由于 sc2 是静态的,查询可能在设置 _externalContainerId 之前运行(_externalContainerId = null),这将返回空。然后它将在程序期间保持为空,因为它没有被重新计算,当您尝试访问成员时会导致错误。由于您在构造函数中设置了 _externalContainerId,因此您也可以在其中放置 sc2 的分配。例如

public ShippingCont(string id)
{
    this._existingContainerId = id;
    sc2 = shippingContainer.SHIPPING_CONTAINERs.FirstOrDefault(a => a.CONTAINER_ID == _externalContainerId);
}    
public static ShippingContainerDataContext shippingContainer = new ShippingContainerDataContext();
public SHIPPING_CONTAINER sc2;
private string _containerId = sc2.COMPANY;
private string _company = sc2.COMPANY;

public string fromProgram
{
    get { return _externalContainerId; }
}

public string ContId
{
    get { return sc2.CONTAINER_ID; }
    set { _externalContainerId = value; }
}


public string _ContainerId
{
    get { return sc2.CONTAINER_ID; }
    set { _ContainerId = value; }
}

public string _Company
{
    get { return sc2.COMPANY; }
    set { _company = value; }
}

推荐阅读