如何解决数据集不支持System.Nullable <>实体框架
我需要我的属性允许空值,所以我将其声明为
id BIGINT PRIMARY KEY AUTO_INCREMENT
但是这样做时,我会收到此错误
这是我的代码,用于调用存储过程并将表传递给Crystal Report
Nullable<double> Nat_Salary
这是我的课程
if (Report_Number == "2")
{
var Employee_Data = db.Database.sqlQuery<SR1_Result>("SR1").ToList();
bs.DataSource = Employee_Data;
}
ReportDocument rpt = new ReportDocument();
rpt.Load(Application.StartupPath + "\\Report\\arabic\\" + "R" + Report_Number + ".rpt");
rpt.SetDataSource(bs);
这是存储过程:
public partial class SR1_Result
{
public int EmployeeCode { get; set; }
public string EmployeeName { get; set; }
public string JobName { get; set; }
public System.DateTime Date_Hiring { get; set; }
public Nullable <double> Nat_Salary { get; set; }
public string AdministrationName { get; set; }
public string DepartmentName { get; set; }
public string BranchName { get; set; }
}
如何在不从ALTER PROCEDURE [dbo].[SR1]
AS
BEGIN
SELECT
EmployeeCode,EmployeeName,JobName,Date_Hiring,Nat_Salary,AdministrationName,DepartmentName,BranchName
FROM
Employee_List_Code_Name_Jop_DateHiring s
END
删除可空值的情况下解决此错误?
解决方法
猜测,由于您显示的代码实际上根本没有提及或使用DataSet / DataTable,因此Crystal Reports在内部将List<SR1_Result>
拆包为DataTable,并自动创建列,但是盲目地将Nullable<double> SR1_Result.Nat_Salary
传递给datatable.Columns.Add("Nat_Salary",typeof(Nat_Salary))
(或它的反射等效项),并且DataTable反对将一列声明为Nullable
您必须修复传入的对象的形状,并且最明智的做法是,它看起来像您创建的DataTable,而不是交给CR来做
丢弃ToList
调用,并编写一个循环/一些代码,该代码创建一个数据表并将其填充以传递给CR。该列可以声明为具有typeof(double)
,也可以声明为AllowDbNull = true
,然后在填充时,如果Nat_Salary为null,则不要为该列设置值
简单地说:
var dt = new DataTable();
...
dt.Column.Add("Nat_Salary",typeof(double)).AllowDbNull = true;
...
foreach(var x in db.Database.SqlQuery<SR1_Result>("SR1"))
var ro = dt.Rows.NewRow();
...
if(x.Nat_Salary.HasValue)
ro["Nat_Salary"] = x.Value;
...
}
或者,如果将Nat_Salary明智地转换为不可为空的类型,则可以.Select
使用CR的匿名类型进行转换,以使用Nat_Salary的替代值
var r = db.Database.SqlQuery<SR1_Result>("SR1").Select(x =>
...,Nat_Salary = x.Nat_Salary.GetValueOrDefault(0),...
);
这会将SR1_Result更改为具有Nat_Salary的匿名类型,该类型不再是Nullable<double>
,而是普通的double
,并且在内部转换为数据表时CR不会爆炸>
在这两个代码示例中,...
是您在SR1_Result
中的其他列。您将必须列出它们,除非您想要进行同样的反思“查看对象,列出其属性名称和类型,并将其变成数据表,但如果该属性为可空,则应用一些自定义逻辑”过程
或者,也许CR已经遇到了这种破坏行为,并推出了一个版本的CR,以检查该属性是否可为空,并创建一列以允许Nullable包装的类型为null的列-检查更新/与CR对话(谁现在拥有他们)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。