【问题标题】:InvalidCastException when running linq 2 sql statement运行 linq 2 sql 语句时出现 InvalidCastException
【发布时间】:2010-12-17 19:40:49
【问题描述】:

C#、Linq2Sql、.NET 2.0、SQL 2005 Express

当我运行以下代码时,我得到一个 InvalidCastException 无法将 System.Byte[] 类型转换为 System.String

这不会发生在表中的所有行上,即这段代码运行良好。

我检查了表中没有 linq 声明为 SYStem.Byte[] 的列

堆栈跟踪表明异常发生在 linq 语句上,当我 F11 在代码中永远不会调用 GetProject 异常发生在此方法之前 被调用。

所以我认为这是 Linq 框架的错误。

这让我很难过?有什么想法吗?

[代码]

    public Project GetProject(int id)
    {
        var project = (from row in _dbctx.Projects
                       where row.ProjectID == id
                       select row).SingleOrDefault();

        Project proj = GetProject(project);

        return proj;
    }

    private Project GetProject(TBRServices.Domain.TBR.DataContext.Project sqlproject)
    {
        Project project = new Project();

        project.ProjectID = sqlproject.ProjectID;
        project.ProjectName = sqlproject.ProjectName;
        project.ProjectDescription = sqlproject.ProjectDescription;
        project.ClientID = sqlproject.ClientID;
        project.PurchaseOrderNumber = sqlproject.PurchaseOrderNumber;
        project.ProjectTotalBillingEstimate = sqlproject.ProjectTotalBillingEstimate;
        project.EmployeeID = sqlproject.EmployeeID;
        project.ProjectBeginDate = sqlproject.ProjectBeginDate.ToString();
        project.ProjectEndDate = sqlproject.ProjectEndDate.ToString();
        project.Active = sqlproject.Active;
        project.InclGST = sqlproject.InclGST;
        project.ContractRate = sqlproject.ContractRate;
        project.MarginRate = sqlproject.MarginRate;
        project.Notes = sqlproject.Notes;
        project.PayrollTax = sqlproject.PayrollTax;
        project.EmployeeReference = sqlproject.EmployeeReference;
        project.PayReference = sqlproject.PayReference;
        project.ProjectLocation = sqlproject.ProjectLocation;
        project.ContractTypeID = sqlproject.ContractTypeID;
        project.DoNotCalcMarginOrGST = sqlproject.DoNotCalcMarginOrGST;
        project.ConvertToInvoice = sqlproject.ConvertToInvoice;
        project.AuthFirstname = sqlproject.AuthFirstname;
        project.AuthLastname = sqlproject.AuthLastname;
        project.AuthEmail = sqlproject.AuthEmail;
        project.CapturedDocumentType = sqlproject.CapturedDocumentType;
        project.TimesheetProcessingType = sqlproject.TimesheetProcessingType;
        project.TimesheetFrequency = sqlproject.TimesheetFrequency;
        project.AggregateTimesheet = sqlproject.AggregateTimesheet;
        project.AggregateAutomatically = sqlproject.AggregateAutomatically;
        project.BusProcEmpCut = sqlproject.BusProcEmpCut;
        project.BusProcAgencyCut = sqlproject.BusProcAgencyCut;
        project.SendCopyTimesheet = sqlproject.SendCopyTimesheet;
        project.TimesheetRecipient1 = sqlproject.TimesheetRecipient1;
        project.TimesheetRecipient2 = sqlproject.TimesheetRecipient2;
        project.SendCopyInvoice = sqlproject.SendCopyInvoice;
        project.PublishedOn = sqlproject.PublishedOn.ToString();
        project.SendAggTimesheetsWhenReceived = sqlproject.SendAggTimesheetsWhenReceived;
        project.AuthoriseInvoice = sqlproject.AuthoriseInvoice;
        project.HourlyDailyMthly = sqlproject.HourlyDailyMthly;
        project.EmployeeCategory = sqlproject.EmployeeCategory;
        project.AgencyRate = sqlproject.AgencyRate;
        project.ConsultantID = sqlproject.ConsultantID;
        project.SendCopyInvoiceEmployee = sqlproject.SendCopyInvoiceEmployee;
        project.UseClientDetailsForTimesheet = sqlproject.UseClientDetailsForTimesheet;
        project.FaxedTimesheet = sqlproject.FaxedTimesheet;
        project.TimesheetEditable = sqlproject.TimesheetEditable;
        project.IncludeInReport = sqlproject.IncludeInReport;
        project.SendLogonEmail = sqlproject.SendLogonEmail;
        project.NoticePeriodID = sqlproject.NoticePeriodID;
        project.ManagerCanViewPaidUnpaid = sqlproject.ManagerCanViewPaidUnpaid;
        project.LesterSalesStaff = sqlproject.LesterSalesStaff;
        project.IncludeSalesReport = sqlproject.IncludeSalesReport;
        project.CurrencyAccount = sqlproject.CurrencyAccount;
        project.LeaveMustBeAuthorisedTimesheet = sqlproject.LeaveMustBeAuthorisedTimesheet;
        project.LeaveMustBeAuthorisedLeaveForm = sqlproject.LeaveMustBeAuthorisedLeaveForm;
        project.DefaultHoursWorkedWeek = sqlproject.DefaultHoursWorkedWeek;
        project.DefaultHoursWorkedDay = sqlproject.DefaultHoursWorkedDay;
        project.AccruedLeaveStartDate = sqlproject.AccruedLeaveStartDate.ToString();
        project.AllowLeaveMoreThanAccrued = sqlproject.AllowLeaveMoreThanAccrued;
        project.IsPaidASalary = sqlproject.IsPaidASalary;
        project.AgencyID = sqlproject.AgencyID;
        project.SendEmailToManagerToOKLeave = sqlproject.SendEmailToManagerToOKLeave;
        project.SpecialPayrollNotes = sqlproject.SpecialPayrollNotes;
        project.SpecialInvoicingNotes = sqlproject.SpecialInvoicingNotes;
        project.InvoiceTermsMessage = sqlproject.InvoiceTermsMessage;
        project.AuthManagerPhone = sqlproject.AuthManagerPhone;
        project.LMF = sqlproject.LMF;
        project.LMFPercent = sqlproject.LMFPercent;
        project.LMFInclInPayRate = sqlproject.LMFInclInPayRate;
        project.LMFOnTop = sqlproject.LMFOnTop;
        project.AgencyComm = sqlproject.AgencyComm;
        project.AgencyCommPercent = sqlproject.AgencyCommPercent;
        project.AgencyCommInclInPayRate = sqlproject.AgencyCommInclInPayRate;
        project.AgencyCommOnTop = sqlproject.AgencyCommOnTop;
        project.PayRateInclMargin = sqlproject.PayRateInclMargin;
        project.MarginRatePercent = sqlproject.MarginRatePercent;
        project.MarginRateGST = sqlproject.MarginRateGST;
        project.MarginRateInclInPayRate = sqlproject.MarginRateInclInPayRate;
        project.MarginRateOnTop = sqlproject.MarginRateOnTop;
        project.PayRateInclSuper = sqlproject.PayRateInclSuper;
        project.PayrollTaxAmount = sqlproject.PayrollTaxAmount;
        project.PayrollTaxPercent = sqlproject.PayrollTaxPercent;
        project.PayrollTaxInclInPayRate = sqlproject.PayrollTaxInclInPayRate;
        project.PayrollTaxOnTop = sqlproject.PayrollTaxOnTop;
        project.TypeOfArrangement = sqlproject.TypeOfArrangement;
        project.ParameterRequired = sqlproject.ParameterRequired;
        project.SpecialPayrollEnabled = sqlproject.SpecialPayrollEnabled;
        project.ClientContactUsedReceiptOfInvoiceID = sqlproject.ClientContactUsedReceiptOfInvoiceID;
        project.ExcludeEmpNameOnInvoice = sqlproject.ExcludeEmpNameOnInvoice;
        project.BPForReporting = sqlproject.BPForReporting;
        project.UseGemteqInvoiceFormat = sqlproject.UseGemteqInvoiceFormat;
        project.TreatPayrollDetailsSameAsBP = sqlproject.TreatPayrollDetailsSameAsBP;


        return project;
    }

[/代码]

【问题讨论】:

  • 嘿,伙计,使用 AutoMapper 而不是这个用于映射两个对象的样板代码

标签: c# linq-to-sql


【解决方案1】:

查看类似 SO 问题的答案。这不是确切的答案,但可以帮助您在查询中找到问题 -

Problem with Linq to SQL

【讨论】:

    【解决方案2】:

    无法将 System.Byte[] 类型转换为 System.String

    表示sqlproject 中的属性存储为byte[],而project 中的对应属性为string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      相关资源
      最近更新 更多