ASP.. NET MVC动态编号类型



我在我的ASP中运行查询。. NET MVC3应用程序从数据库中获取一些数字:

var idQuery = "SELECT " + dynamicColumnName + " FROM " + dynamicTableName;
long[] idItems = db.Database.SqlQuery<long>(idQuery).ToArray();

但是,动态列有时是int类型的int,有时是long。我尝试了long,因为它涵盖了int,但程序抛出了异常:

来自物化'系统'的指定强制类型。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' to type 'System.IConvertible'

我能做些什么来工作我的查询运行int s和long s?对于获取动态类型并将其转换为长工作的方法,我可以在下面的代码行中使用idItems。

试试普通的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]);
}

我得到了一个没有动态类型的解决方案:

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]);
    }
}

首先得到long,如果类型是int,然后得到int并将其转换为long。如果我有一个动态类型,我总是会做转换。因此,如果我的类型是长(通常是),我没有不必要的转换,我认为这是更快的。

最新更新