首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架,DATALENGTH,SUM关于不同的提供者

实体框架,DATALENGTH,SUM关于不同的提供者
EN

Stack Overflow用户
提问于 2012-11-27 02:56:16
回答 1查看 607关注 0票数 0

Server 3.5

Server 2008

DataLenSumQuery:

代码语言:javascript
复制
SELECT SUM(DATALENGTH(Data)) FROM ...

在Server中,Data列的类型是IMAGE

在Server标准中,Data的类型是varbinary(MAX),因为微软说标准版本的图像类型被废弃,并将被删除。

此代码适用于标准版本:

代码语言:javascript
复制
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<long?>(DataLenSumQuery).FirstOrDefault();
            long test= result.HasValue ? result.Value : 0L;
}

但是在CE上抛出异常:

System.InvalidOperationException:从物化的'System.Int32‘类型到可为空的'System.Int64’类型的指定强制转换无效。

反之亦然,这适用于CE:

代码语言:javascript
复制
using (var container = new DatabaseModelContainer())
{
var result = container.ExecuteStoreQuery<int?>(DataLenSumQuery).FirstOrDefault();
            long test= result.HasValue ? result.Value : 0L;
}

但是在Standard上抛出异常:

从物化的“System.Int64”类型到可为空的“System.Int32”类型的指定强制转换无效。

如果两个提供程序上的Data colum都是图像,并且使用了用于ExecuteStoreQuery<int?>,则工作正常。

微软建议在标准版上使用var二进制(MAX),但Compact甚至不支持它。

EN

回答 1

Stack Overflow用户

发布于 2012-11-27 08:53:30

选择CAST(SUM(DATALENGTH(Data))作为BIGINT)

代码语言:javascript
复制
container.ExecuteStoreQuery<long?>()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13576716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档