2016-08-03 52 views
0

我试图通过LINQ选择从我的数据库的image列,并将其保存到q3无法将类型“System.Linq.IQueryable <System.Data.Linq.Binary>到字节

------------------------------- 
|   table : admin  | 
------------------------------- 
| username | password | image | 
------------------------------- 

查询:

var q3 = alnq.tbl_Admins.Where(c => c.fld_UserName == userName).Select(c => c.fld_Image); 

当我想这个查询转换为字节数组,我得到一个错误:

byte [] DbImageByte = q3.ToArray(); 

错误:

Cannot implicitly convert type 'System.Data.Linq.Binary[]' to 'byte[]'

+0

什么类型是'fld_Image'? –

+0

它是varbinary(最大) – user3319756

+0

您可以请尝试添加.FirstOrDefault()后.select()?然后检查 –

回答

0

在LINQ

,每当我们写选择与在条件是否其提供的主键也不会明白,只能有一个行返回。 所以我们需要告诉查询请只返回Linq的FirstOrDefault()方法中的一行。

因此对于您的案例只需在您的查询后FirstOrDefault(),因此它只会导致一行而不是一组行。

0

在你的代码,.Select(c => c.fld_Image)给你一个集合有一个项目(或更多,如果fld_UserName不是唯一的)。您必须通过使用FirstOrDefault()将第一个项目从列表中取出。

使用此:

var q3 = alnq.tbl_Admins.Where(c => c.fld_UserName == userName).Select(c => c.fld_Image).FirstOrDefault(); 
+0

@GiladGreen是的,由于'Binary []'为'byte []',所以出现了转换错误。在接受第一个元素后,它将成为'byte []'的'Binary',它应该是一个有效的演员。 – sachin

0

每Ling.binary包含字节数组,你必须把它存储阵列或列表

Binary[] binary = q3.ToArray(); 
List<byte[]> byteArray = new List<byte[]>(); 
foreach(var b in binary){ 
    byteArray.Add(b.ToArray()); 
} 
0

我认为Q3是IEnumarble名单英寸

能否请您尝试类似

var q3 = alnq.tbl_Admins.Where(c => c.fld_UserName == userName).Select(c => c.fld_Image).FirstOrDefault(); 
byte[] DbImageByte = q3.ToArray(); 
相关问题