【问题标题】:How to get a byte array length using LINQ to Entities?如何使用 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

标签: c# arrays linq linq-to-entities


【解决方案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 的解释,帮助我更了解事情!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多