我正在我的ASP.NET MVC3应用程序中运行一个查询,以便从数据库中获得一些数字:
var idQuery = "SELECT " + dynamicColumnName + " FROM " + dynamicTableName;
long[] idItems = db.Database.SqlQuery<long>(idQuery).ToArray();但是,动态列有时是int类型的int,有时是long。我尝试了long,因为它涵盖了int,但是程序抛出了异常:
从物化“System.Int32”类型到“System.Int64”类型的指定强制转换无效。
我尝试了dynamic类型,但是没有正确的数字:
dynamic[] idItems = db.Database.SqlQuery<dynamic>(idQuery).ToArray();
long[] idItemsLong = new long[idItems.Length];
for (int i = 0; i < idItemsLong.Length; i++)
{
idItemsLong[i] = Convert.ToInt64(idItemsLong[i]);
}抛出异常:
无法将“System.Object”类型的对象强制转换为“System.IConverable”类型。
对于int和long的查询运行,我能做些什么?获得动态类型并将它们转换为long工作的方法,我可以在下面的代码行中使用idItems。
发布于 2013-01-12 22:38:41
我找到了一个没有动态类型的解决方案:
long[] idItems = new long[1];
long[] valueItems = new long[1];
try
{
idItems = db.Database.SqlQuery<long>(idQuery).ToArray();
valueItems = db.Database.SqlQuery<long>(valueQuery).ToArray();
}
catch (Exception e)
{
int[] idItemsInt = db.Database.SqlQuery<int>(idQuery).ToArray();
int[] valueItemsInt = db.Database.SqlQuery<int>(valueQuery).ToArray();
idItems = new long[idItemsInt.Length];
valueItems = new long[idItemsInt.Length];
for (int i = 0; i < idItems.Length; i++)
{
idItems[i] = Convert.ToInt64(idItemsInt[i]);
valueItems[i] = Convert.ToInt64(valueItemsInt[i]);
}
}这样,我首先得到长,如果类型是int,而不是得到int,然后将它们转换为long。如果我有一个动态类型,我总是会进行转换。因此,如果我的类型是长(一般是),我没有不必要的转换,我认为这是更快。
发布于 2013-01-12 19:45:21
试试普通的老object
object[] idItems = db.Database.SqlQuery<object>(idQuery).ToArray();
long[] idItemsLong = new long[idItems.Length];
for (int i = 0; i < idItemsLong.Length; i++)
{
idItemsLong[i] = Convert.ToInt64(idItems[i]);
}https://stackoverflow.com/questions/14297013
复制相似问题