如何使用 LINQ to Entities 获取字节数组长度?

Posted

技术标签:

【中文标题】如何使用 LINQ to Entities 获取字节数组长度?【英文标题】:How to get a byte array length using LINQ to Entities? 【发布时间】:2013-10-30 01:12:23 【问题描述】:

我有一个 Document 类,该类将该文档的数据存储为字节数组。 我需要使用 LINQ to Entities 检查数组的大小。

我尝试了以下方法:

[long Linq query here...] o.Data.Length < 800000)

问题是我得到以下异常:

LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayLength”。"

还有其他方法可以检查字节数组的大小吗?

【问题讨论】:

sql如何在数据库中存储byte[] 你有没有把它缩小到那一行?查询的其余部分可能值得发布。另外,800000 是一个常数,还是以某种方式确定的? @Johnny5 我想作为一个 BLOB 【参考方案1】:

使用SqlFunctions.DataLength Method (Byte[]) 比较长度。

yourquery..... SqlFunctions.DataLength(o.Data) < 800000)

见:Linq2EF pitfall: Using Length property causes System.NotSupportedException

【讨论】:

很好,我不知道那个!【参考方案2】:

如果可能,您的 LINQ to Entities 查询将被转换为 SQL。由于翻译器不会将 Array.Length 映射到任何 SQL 方法,因此您不能在 LINQ to Entities 查询中使用它。

您可以在表中添加一列或创建一个VIEW 来计算长度并将其公开为一列。然后您可以查询该字段,它将起作用。

【讨论】:

或者创建一个存储过程。 ...是的,但是 VIEW 会更容易使用,因为您可以在 VIEW 上查询。 是的,我同意,只是提供另一种选择:) 感谢 Roy 的解释,帮助我更了解事情!

以上是关于如何使用 LINQ to Entities 获取字节数组长度?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq to Entities 在一次操作中获取 COUNT 和 SKIP TAKE

LINQ to Entities - 选择用户的所有朋友以及他们之间的聊天

如何将视图模型与 LINQ to Entities 一起使用

使用Linq to Entities在一个请求中选择计数和计数

如何在 LINQ to Entities Join 中使用 Convert.Int32() 方法?

Linq to Entities 中的动态 where 子句 (OR)