【问题标题】:When executing the linq query its throwing the casting error system.int32执行 linq 查询时,它会抛出转换错误 system.int32
【发布时间】:2019-12-02 06:34:01
【问题描述】:
var Appointment = (from app in _context.Appointments
                                   join pt in _context.Patients on app.PatientID equals pt.ID into 
                                   patients
                                   from pt in patients.DefaultIfEmpty()
                                   join doc in _context.Doctors on app.DoctorID equals doc.ID into 
                                   doctors
                                   from doc in doctors.DefaultIfEmpty()
                                       //join offloc in _context.OfficeLocations on app.DoctorID 
                                    equals offloc.DoctorID into officlocation
                                       //from offloc in officlocation.DefaultIfEmpty()
                                   join docavail in _context.DoctorsAvailabilities on 
                                   app.AvailabilityID equals docavail.ID into availability
                                   from docavail in availability.DefaultIfEmpty()
                                   where ((app.CreatedByReferral == ReferralSpecialistID || 
                                   app.CompanyID == CompanyID || app.UserGroupID == CompanyID) && 
                                   app.OtherPatientID == null && pt.Status == StatusConstant.Active 
                                   && app.Status != AppointmentRescheduledID && 
                                   app.IsCloseAppointment != true)
                                   select new AppointmentDataTableResult
                                   {

                                       appointmentID = app.ID,
                                       PatientID = pt.ID,
                                       patientname = (pt.NamePrefix ?? "") + " " + pt.FirstName + " " + pt.LastName + " " + (pt.NameSuffix ?? ""),
                                       ParentPatientID = 0,
                                       dateofbirth = pt.DateOfBirth,
                                       patientType = _context.CategoryDetails.Where(x => x.ItemID == app.PatientTypeID).Select(x => x.MasterData).FirstOrDefault(),
                                       phone = pt.Phone,
                                       Date = docavail.Date,
                                       Time = docavail.Time,
                                       statustext = _context.CategoryDetails.Where(x => x.ItemID == app.Status).Select(x => x.MasterData).FirstOrDefault(),
                                       doctorname = (doc.NamePrefix ?? "") + " " + doc.FirstName + " " + doc.LastName + " " + (doc.NameSuffix ?? ""),
                                       DoctorID = doc.ID,
                                       checkin = app.CheckIn,
                                       checkout = app.CheckOut,
                                       checkintime = app.CheckInTime,
                                       checkouttime = app.CheckOutTime,
                                       withoutslot = app.WithoutSlot,
                                       locatioid = app.LocationID ?? 0,
                                       AppointmentSource = app.AppointmentSource ?? 0,
                                       Status = app.Status ?? 0,
                                       IsPastAppointment = app.IsPastAppointment,
                                       casestatusID = app.CaseStatusID ?? 0,
                                       caseTypeID = app.CaseTypeID ?? 0,
                                       ReferralAttorneyID = app.ReferralAttorneyID ?? 0,
                                       ReferralProviderID = app.ReferralProviderID ?? 0,
                                       patientTypeID = app.PatientTypeID ?? 0,
                                       InsuranceID = app.InsuranceID ?? 0,
                                       PendingAppointmentDate = app.PreferredAppointmentDateTime,
                                       // AppointmentDate = docavail.Date.Value.Month + "/" + docavail.Date.Value.Day + "/" + docavail.Date.Value.Year + " " + docavail.Time.Value.Hours + ":" + docavail.Time.Value.Minutes,
                                       ReportCount = _context.DoctorReportStatus.Where(x => x.StatusID == StatusConstant.Active && x.AppointmentID == app.ID).Count(),
                                       RerecordUploadedYN = app.RerecordUploadedYN,
                                       IsAppointmentPending = app.IsAppointmentPending,
                                       IsPendingBillingRecoardYN = app.IsPendingBillingRecoardYN,
                                       strDate = docavail.Date.Value.Month + "/" + docavail.Date.Value.Day + "/" + docavail.Date.Value.Year,
                                       DateChekin = default(DateTime),
                                       totaldays = 0
                                   });

【问题讨论】:

  • 这是一个语法错误 - 您已经评论了 join,但在下一行使用了 equals
  • 你好!欢迎来到 Stackoverflow。这能回答你的问题吗?stackoverflow.com/questions/40448796/…
  • 没有人,如果它会是语法错误,它不会在其他情况下运行,它只是在将其转换为 .tolist() 时抛出错误
  • 请帮帮我,我太瞎了,看不见。你在哪里投射或转换任何东西到int32
  • 实际上,为了能够真正帮助您,我们需要声明 AppointmentDataTableResult 和所有涉及的表,以查看所有变量及其 Types。否则这将仍然是一个猜谜游戏......而且可能会永远持续

标签: c# .net linq model-view-controller


【解决方案1】:

我也经常遇到同样的问题,当您放置 Tolist 方法时会出现此问题,因为在放置 Tolist() 方法之前,查询生成的输出属于类型
可查询
但这不是您问题的解决方案

问题是可能是 1 您将 Nullable 整数类型变量分配给不可为 null 的整数类型值或 2 将 Nullable 整数值与 Join 中的 Non Nullable 值进行比较,反之亦然

第二种情况的机会更大,因为在分配时,c#编译器会出错 检查您的比较变量类型,让我进行一些跟进。

【讨论】:

  • 我在我的查询中都没有做过,有些可以为空,有些不是,但我没有检查可空和不可空
  • 您在第 9 行比较的声明的“offloc”变量在哪里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多