比较对象int或dbnull.value linq

时间:2014-10-27 16:51:23

标签: c# winforms linq

我有一个linq查询:

var capacityQuery = from Info in mySQLDataTable.AsEnumerable() where Info.Field<object>("location") == Location.ID orderby Info.Field<DateTime>("date")

行&#34;其中Info.Field(&#34; location&#34;)== Location.ID&#34;是我遇到问题的地方

我的问题是。如何在where语句中进行比较,该语句可能是DBNull.Value或任何一方的int值

以下是供参考:

位置是自定义类。 ID返回一个对象。

    private int? addressID;

    public object ID {
        get
        {
            if (addressID == null)
                return DBNull.Value;
            else
                return addressID;
        }
    }

它必须是DBNull的原因是因为它来自数据库。 &#34;表&#34;也正在从数据库中填写。

我知道==在这种情况下是错误的,因为它比较了明显错误的引用。

我知道object.equal(var1,var2)应该可以工作,但它并不是因为它们是2个不同的对象。

值表可以是表侧和类侧的int或DBNull。

这是在foreach循环中,因此我使用相同的查询,其中Location具有int值或者具有DBNull值。

我的问题再一次。如何在where语句中进行比较,该语句可能是DBNull.Value或任何一方的int值

1 个答案:

答案 0 :(得分:0)

使用

private int? addressID;

public object ID {
    get
    {
        return addressID.HasValue ? addressID.Value as object : DBNull.Value;    
    }
}

代替。这样,如果尚未初始化addressID或者故意将其设置为null,则ID属性将返回DBNull.Value。否则,它将返回一个int,但你必须自己从object转换为int或int?。

话虽如此,作者已将“null”的创建称为“十亿美元的错误”,但到目前为止,我认为它已达数万亿。你应该返回一个int?如果可以,数据库中的数据类型,在这种情况下,比较将始终有效。我不确定你使用哪个ORM,但据我所知,Dapper和linq2db正确处理这种情况。