如何使用 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在一个请求中选择计数和计数