【发布时间】:2016-07-01 13:58:23
【问题描述】:
{“转换为值类型'System.Int32'失败,因为具体化值为null。结果类型的泛型参数或查询必须使用可为空的类型。”}
我正在尝试处理具有通用类型T 的可查询列表中的null 值。我试过 DefaultIfEmpty(0) 不起作用,因为无法将 Type T 转换为 int。如何处理nulls 或ints 到列表?
public IEnumerable<T> SelectAll<T>(Object TableName)where T:class
{
String TableNameString = Type.GetType(TableName.ToString()).Name;
QueryString = "SELECT" + " " + "*" + " " + "FROM" + " " + TableNameString;
if (Database.Connection.State == ConnectionState.Closed)
Database.Connection.Open();
var a = ((IObjectContextAdapter)this).ObjectContext;
var t = a.ExecuteStoreQuery<T>(QueryString).AsQueryable().DefaultIfEmpty().ToList();
List<T> newList = t;
return newList;
}
【问题讨论】:
-
你是怎么调用这个方法的?在您的具体情况下,
T的价值是多少?是int吗? -
数据库中的列是否可以为空?
-
数据库中有一些空列@YacoubMassad
-
我在一个类中调用这个方法,它将类的类型转换为 T 并返回一个 Listof
@YacoubMassad -
如果数据库表允许表中有空值,您需要在代码中适当地处理它。您可以在 QueryString 中使用一些 SQL 来执行此操作。
SELECT (prop1, prop2, prop3, ISNULL(prop4, 0), ISNULL(prop5, 'NULL') FROM table_name;其中 prop4 是整数类型,prop5 是 varchar 类型。此外,您可以将当前查询放在单个字符串中,QueryString = "SELECT * FROM " + TableNameString;
标签: c# entity-framework linq generics