【发布时间】:2011-05-28 23:15:14
【问题描述】:
我有一个数据库,其中包含一个带有“图像”列的表:
此列实际上包含一个编码为 HEX 字节值的长字符串。
我需要选择此列编码的字符串包含某个子字符串的所有记录。伪代码是:
Select *
From SomeTable
Where dataColumnofTypeImage.ToString().Contains("somesubstring")
我尝试在 Linq (LinqPad) 中使用:
from z in Zanus
let p = z.Udata.ToArray() // z.Udata will be of type System.Linq.Binary so I want to make a byte array out of it...
where System.Text.ASCIIEncoding.ASCII.GetString(p).Contains("EXED")
select new
{
z.Idnr,
z.Udatum,
z.Uzeit,
z.Unr,
z.Uart,
z.Ubediener,
z.Uzugriff,
z.Ugr,
z.Uflags,
z.Usize,
z.Udata
}
但这根本不起作用说:
NotSupportedException:方法 'Byte[] ToArray()' 没有支持的 SQL 转换。
我简直不敢相信不可能在 Where 子句中检查二进制数据类型,就像我可能检查其他数据类型一样...
有人可以帮帮我吗?
【问题讨论】:
-
您希望 ToString 表示看起来像什么?我希望
System.Linq.Binary或二进制数据的字符解释,而不是二进制数据本身,所以即使它会编译你的代码仍然是错误的。 -
您是否尝试过 PatIndex 而不是 Contains? msdn.microsoft.com/en-us/library/…
-
@Ed @shsmith 问题不在于字符串操作本身。首先,我似乎无法从列中获取数据。请在下面查看我的 cmets 以获取示例数据、人类可读的表示以及我遇到的问题。
-
你有没有想过你会如何用 SQL 来写这个? LINQ to SQL 将 LINQ to SQL 转换为 SQL,所以如果在 SQL 中没有办法做到这一点,那你就被坑了。