无法转换类型';System.Linq.IQueryable<;System.Data.Linq.Binary
本文关键字:System Linq lt Data Binary IQueryable 转换 类型 | 更新日期: 2023-09-27 17:59:49
我正试图通过linq从数据库中选择一个image
列,并将其保存到q3
中
-------------------------------
| 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();
错误:
无法将类型"System.Data.Linq.Binary[]"隐式转换为"byte[]"
在Linq 中
每当我们用where条件写select时,无论它是否是我们的主键,它都不会理解只能返回一行。所以我们需要告诉查询,请使用Linq的FirstOrDefault()
方法只返回一行。
因此,对于您的案例,在查询后仅在FirstOrDefault()
,因此它将只产生一行,而不是一组行。
在您的代码中,.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();
每个Ling.binary包含字节的数组都必须将其存储在数组或列表中
Binary[] binary = q3.ToArray();
List<byte[]> byteArray = new List<byte[]>();
foreach(var b in binary){
byteArray.Add(b.ToArray());
}
我以为q3是一个IEnumarble列表。
你能试试吗
var q3 = alnq.tbl_Admins.Where(c => c.fld_UserName == userName).Select(c => c.fld_Image).FirstOrDefault();
byte[] DbImageByte = q3.ToArray();