我有一个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值
答案 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正确处理这种情况。