LINQ to SQL with Extra Nullable Columns

时间:2016-08-03 21:59:48

标签: c# linq

我们有一个数据绑定数据网格,它显示了正在使用的产品数量。

顾名思义,它有一个额外的列来指定调整此数量的金额。

定义绑定源的LINQ to SQL是

public BindingList<MeterRead> QryMeterRead
{
    get
    {
        var list = new BindingList<MeterRead>();
        list.AllowNew = false;
        list.AllowRemove = false;
        var records = ExecuteQuery<MeterRead>(
            @"select
                mr.meter_rd_id,
                mr.meter_id,
                mr.read_dt,
                mr.prev_dt,
                mr.reading,
                mr.demand_reading,
                mr.usage,
                mr.orig_usage,
                mr.prev_usage,
                mr.estimated,
                mr.kvar_reading,
                mr.change_out_from_id,
                mr.multi_mtr_est,
                adjust_dt = convert(datetime, null),
                usage_adjust = convert(integer, null),
                measure_id = convert(integer, null),
                mr.location_id,
                'customer_id' = {0},
                'group_id' = {1}
            from ub_meter_read mr (nolock) 
            where mr.meter_id = {2}
            order by meter_rd_id desc", usageparams.read_customer_id, usageparams.read_group_id, usageparams.read_meter_id);
        if (records != null)
        {
            foreach (MeterRead rec in records)
            {
                list.Add(rec);
            }
        }
        return list;
    }
}

其中adjust_dtusage_adjustmeasure_id是添加的字段。它们不存在于表中,但允许进行数据调整。

在我们表单的数据网格上,单击“保存”按钮时,可以在数据中进行更改以进行提交。

对表单进行一些更改,例如更改数字usage_adjust值,基础LINQ数据源选择这些更改。

一切都很好。

如果有人(比如测试部门的人员)决定通过删除usage_adjust值来删除这些更改,那么LINQ似乎正在尝试绑定它们 - 为数据网格抛出误导性的空引用错误。 / p>

我猜其他人已经遇到过这种情况,但我不知道该怎么称呼它或如何搜索这种类型的错误情况。

有谁知道解决此类问题的好方法?

1 个答案:

答案 0 :(得分:0)

目前,将usage_adjust默认值设为0已停止错误。

const string sqlfrmt = 
    @"select
        mr.meter_rd_id,
        mr.meter_id,
        mr.read_dt,
        mr.prev_dt,
        mr.reading,
        mr.demand_reading,
        mr.usage,
        mr.orig_usage,
        mr.prev_usage,
        mr.estimated,
        mr.kvar_reading,
        mr.change_out_from_id,
        mr.multi_mtr_est,
        adjust_dt = convert(datetime, null),
        usage_adjust = convert(integer, 0),
        measure_id = convert(integer, null),
        mr.location_id,
        'customer_id' = {0},
        'group_id' = {1}
    from ub_meter_read mr (nolock) 
    where mr.meter_id = {2}
    order by meter_rd_id desc";

现在,数据网格不是空白,而是包含0,我在更新例程中提供了代码,以跳过调整0的字段。

partial void UpdateMeterRead(MeterRead instance)
{
    try
    {
        if (instance.usage_adjust != 0)
        {
            sp_ub_adjust_usage(instance.location_id, instance.meter_id, instance.group_id, instance.adjust_dt, instance.usage_adjust,
                instance.meter_rd_id, instance.measure_id, instance.customer_id, BaseContext.CurrentSpid);
        }
    }
    catch (Exception err)
    {
        Console.WriteLine(err);
    }
}

如果有人在接下来的一两个月内提出解决此问题的解释,我会接受他们的回答。

我以后编辑文件的路径:

Drive:\ICIS_7V04T52\in\Main\in\o\in.o.ub\am\Readings\ua\DataDB\uaDB.cs