无法将类型'System.Linq.IQueryable <system.data.linq.binary>转换为byte

时间:2016-08-03 07:27:29

标签: c# linq

我正在尝试通过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 []'

4 个答案:

答案 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(),所以它只会产生一行而不是一组行。