C# 无法将DBNull.Value强制转换为类型';System.DateTime';。请使用可为空的类型。关于使用Linq查询
我有两个名为dt1Cloned和dt2Cloned的数据表。我已经实现了用于连接这两个表的linq查询,如下所示:C# 无法将DBNull.Value强制转换为类型';System.DateTime';。请使用可为空的类型。关于使用Linq查询,c#,asp.net,linq,datatable,C#,Asp.net,Linq,Datatable,我有两个名为dt1Cloned和dt2Cloned的数据表。我已经实现了用于连接这两个表的linq查询,如下所示: var res = (from p in dt1Cloned.AsEnumerable() join t in dt2Cloned.AsEnumerable() on p.Field<Int64>("WorkId") equals t.Field<Int64>("WorkId")
var res = (from p in dt1Cloned.AsEnumerable()
join t in dt2Cloned.AsEnumerable()
on p.Field<Int64>("WorkId") equals t.Field<Int64>("WorkId")
select new
{
DivisionId = p.Field<Int64>("DivisionId"),
DistrictId = p.Field<Int64>("DistrictId"),
MCId = p.Field<Int64>("MCId"),
ACId = p.Field<Int64>("ACId"),
PCId = p.Field<Int64>("PCId"),
DivisionName = p.Field<string>("DivisionName"),
DistrictName = p.Field<string>("DistrictName"),
MCName = p.Field<string>("MCName"),
AssemblyCName = p.Field<string>("AssemblyCName"),
ParliamentaryCName = p.Field<string>("ParliamentaryCName"),
WorkId = p.Field<Int64>("WorkId"),
WorkDetail = p.Field<string>("WorkDetail"),
WorkName = p.Field<string>("WorkName"),
RoadCode = p.Field<string>("RoadCode"),
AdApp = p.Field<string>("AdApp"),
//!Convert.IsDBNull(dr.t1.Field<DateTime?>("Step Start Time")) ? dr.t1.Field<DateTime?>("Step Start Time") : DBNull.Value
//AdminAppDate = !Convert.IsDBNull(p.Field<DateTime>("AdminAppDate")) ? p.Field<DateTime>("AdminAppDate") : DBNull.Value,
AdminAppDate = p.Field<DateTime>("AdminAppDate"),
TargetDate = p.Field<DateTime>("TargetDate"),
AppAmt = p.Field<Int64>("AppAmt"),
TApp = p.Field<string>("TApp"),
TechAppDate = p.Field<DateTime>("TechAppDate"),
TAppAmt = p.Field<Int64>("TAppAmt"),
SourceOfFunds = p.Field<string>("SourceOfFunds"),
AllocatedAmt = p.Field<Int64>("AllocatedAmt"),
ReleaseAmt = p.Field<Int64>("ReleaseAmt"),
WStatus = p.Field<string>("WStatus "),
Expenditure = p.Field<string>("Expenditure"),
ExpenditurePer = p.Field<Int64>("ExpenditurePer"),
ProgressPercentage = p.Field<Int64>("ProgressPercentage"),
Progress = p.Field<string>("Progress"),
UserTypeId = p.Field<Int64>("UserTypeId"),
UserWorkType = p.Field<string>("UserWorkType"),
SchemeId = p.Field<Int64>("SchemeId"),
SchemeName = p.Field<string>("SchemeName"),
AgencyId = p.Field<Int64>("AgencyId"),
AgencyName = p.Field<string>("AgencyName"),
TADate = p.Field<DateTime>("TADate"),
AADate = p.Field<DateTime>("AADate"),
StatusDate = p.Field<DateTime>("StatusDate"),
ProgressDate = p.Field<DateTime>("ProgressDate"),
ReleaseDate = p.Field<DateTime>("ReleaseDate"),
AllocationDate = p.Field<DateTime>("AllocationDate"),
ExpDate = p.Field<DateTime>("ExpDate"),
TimeLimit = p.Field<Int64>("TimeLimit"),
TimeSpent = p.Field<Int64>("TimeSpent"),
TimeSpentPer = p.Field<double>("TimeSpentPer"),
TimeDiff = p.Field<double>("TimeDiff"),
EarthWorkP = p.Field<double>("EarthWorkP"),
EarthWorkC = p.Field<double>("EarthWorkC"),
SolingP = p.Field<double>("SolingP"),
SolingC = p.Field<double>("SolingC"),
WearingP = p.Field<double>("WearingP"),
WearingC = p.Field<double>("WearingC"),
RaisingP = p.Field<double>("RaisingP"),
RaisingC = p.Field<double>("RaisingC"),
StrengtheningP = p.Field<double>("StrengtheningP"),
StrengtheningC = p.Field<double>("StrengtheningC"),
PCLaidP = p.Field<double>("PCLaidP"),
PCLaidC = p.Field<double>("PCLaidC"),
ModifyDate = p.Field<DateTime>("ModifyDate"),
VillageName = t.Field<string>("VillageName"),
}).ToList();
var res=(来自dt1Cloned.AsEnumerable()中的p)
在dt2Cloned.AsEnumerable()中加入t
p.Field(“WorkId”)等于t.Field(“WorkId”)
选择新的
{
部门ID=p.字段(“部门ID”),
DistrictId=p.Field(“DistrictId”),
MCId=p.字段(“MCId”),
ACId=p.字段(“ACId”),
PCId=p.字段(“PCId”),
分部名称=p.字段(“分部名称”),
DistrictName=p.Field(“DistrictName”),
MCName=p.Field(“MCName”),
AssemblyCName=p.Field(“AssemblyCName”),
议会名称=p.Field(“议会名称”),
工作ID=p.字段(“工作ID”),
WorkDetail=p.Field(“WorkDetail”),
WorkName=p.Field(“WorkName”),
道路代码=p.字段(“道路代码”),
AdApp=p.字段(“AdApp”),
//!Convert.IsDBNull(dr.t1.字段(“步骤开始时间”)?dr.t1.字段(“步骤开始时间”):DBNull.Value
//AdminAppDate=!Convert.IsDBNull(p.Field(“AdminAppDate”))?p.Field(“AdminAppDate”):DBNull.Value,
AdminAppDate=p.Field(“AdminAppDate”),
TargetDate=p.字段(“TargetDate”),
AppAmt=p.字段(“AppAmt”),
TApp=p.字段(“TApp”),
TechAppDate=p.Field(“TechAppDate”),
TAppAmt=p.字段(“TAppAmt”),
SourceOfFunds=p.Field(“SourceOfFunds”),
AllocatedAmt=p.字段(“AllocatedAmt”),
ReleaseAmt=p.字段(“ReleaseAmt”),
WStatus=p.Field(“WStatus”),
支出=p.字段(“支出”),
expenditurecur=p.字段(“expenditurecur”),
ProgressPercentage=p.字段(“ProgressPercentage”),
进度=p.字段(“进度”),
UserTypeId=p.Field(“UserTypeId”),
UserWorkType=p.Field(“UserWorkType”),
SchemeId=p.Field(“SchemeId”),
SchemeName=p.Field(“SchemeName”),
AgencyId=p.Field(“AgencyId”),
AgencyName=p.Field(“AgencyName”),
TADate=p.字段(“TADate”),
AADate=p.字段(“AADate”),
StatusDate=p.字段(“StatusDate”),
ProgressDate=p.字段(“ProgressDate”),
ReleaseDate=p.字段(“ReleaseDate”),
AllocationDate=p.字段(“AllocationDate”),
ExpDate=p.字段(“ExpDate”),
TimeLimit=p.字段(“TimeLimit”),
timespunt=p.字段(“timespunt”),
TimePentPER=p.字段(“TimePentPER”),
TimeDiff=p.字段(“TimeDiff”),
土方Kp=p.场(“土方Kp”),
蚯蚓KC=p.场(“蚯蚓KC”),
SolingP=p.Field(“SolingP”),
SolingC=p.Field(“SolingC”),
WearingP=p.字段(“WearingP”),
WearingC=p.字段(“WearingC”),
RaisingP=p.字段(“RaisingP”),
RaisingC=p.字段(“RaisingC”),
强化p=p.场(“强化p”),
强化C=p.场(“强化C”),
PCLaidP=p.字段(“PCLaidP”),
PCLaidC=p.Field(“PCLaidC”),
ModifyDate=p.字段(“ModifyDate”),
VillageName=t.Field(“VillageName”),
}).ToList();
在实现上述查询时,我遇到异常“无法将DBNull.Value强制转换为'System.DateTime'类型。请使用可为null的类型。”。如何解决此问题并处理所有数据类型的空值?如果您的数据库字段可以为空,则还需要将正在读取的C#属性设置为空 将您的属性声明为可为空的
。这里有一个方便的速记:DateTime?
public class Person
{
// DateOfBirth is NOT nullable - everyone has a date of birth...
public DateTime DateOfBirth { get; set; }
// DateOfDeath IS nullable - not everyone is dead yet...
public DateTime? DateOfDeath { get; set; }
}
然后,在投影新对象时,可以使用:
DateOfDeath = p.Field<DateTime?>("DateOfDeath"),
DateOfDeath=p.Field(“DateOfDeath”),
那就是ReleaseDate=p.Field(“ReleaseDate”)是的-我只是编辑了我的答案来补充:)我第一次没有很好地阅读这个问题…嗨@Neha。如果这个答案解决了你的问题,你会考虑接受吗?要做到这一点,请单击答案左侧的勾号,使其变为绿色-这就是我们在堆栈溢出问题上感谢人们的方式。谢谢这个错误说明了你需要做的一切,它不需要提问