我正在尝试通过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 []'
答案 0 :(得分: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();
答案 1 :(得分:0)
每个Ling.binary都包含必须将其存储在数组或列表中的字节数组
Binary[] binary = q3.ToArray();
List<byte[]> byteArray = new List<byte[]>();
foreach(var b in binary){
byteArray.Add(b.ToArray());
}
答案 2 :(得分:0)
我认为q3是IEnumarble列表。
你可以试试像
这样的东西 var q3 = alnq.tbl_Admins.Where(c => c.fld_UserName == userName).Select(c => c.fld_Image).FirstOrDefault();
byte[] DbImageByte = q3.ToArray();
答案 3 :(得分:0)
在Linq
每当我们写select选择where条件是否它的主键不会理解它只能返回一行。
所以我们需要告诉查询请只返回一行Linq的FirstOrDefault()
方法。
所以对于你的情况,只是在你的查询后FirstOrDefault()
,所以它只会产生一行而不是一组行。