实体框架中计数结果的数据类型

时间:2017-01-19 15:16:45

标签: entity-framework

看看这段代码:

public long my_function()
{
    return bdd.Database.SqlQuery<long>("SELECT count(*) FROM mytable")).First();
}

此代码在mysql数据库上运行良好。

但是如果我在sql server数据库上运行相同的代码,我会收到此错误:

Erreur: The specified cast from a materialized 'System.Int32' type to the 'System.Int64' type is not valid.

如果我将代码更改为:

,我可以使用
public int my_function()
{
    return bdd.Database.SqlQuery<int>("SELECT count(*) FROM mytable")).First();
}

实际上,我认为sql server使用int32表示count(*)返回值而mysql使用的是int64。 EF和C#无法将int32转换为int64(奇怪?)

你之前有没有注意到这一点?

我想知道如果我的计数(*)超过int32容量会发生什么...... (一个有很多记录)

由于

2 个答案:

答案 0 :(得分:0)

在SQL Server COUNT中返回一个SQL INT,它映射到.Net中的Int32。如果您需要更大的值,则需要使用COUNT_BIG

来自文档:

  

COUNT_BIG始终返回bigint数据类型值。 COUNT始终返回int数据类型值。

答案 1 :(得分:0)

  

你之前有没有注意到这一点?

  

我想知道如果我的计数(*)超过int32会发生什么   能力......(有很多记录)

算术溢出错误

如果您担心自己拥有的记录数量,请尝试此操作:

public long my_function()
{
    return bdd.Database.SqlQuery<long>("SELECT COUNT_BIG(*) FROM mytable")).First();
}

参考: https://msdn.microsoft.com/en-us/library/ms190317.aspx