无法转换类型';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[]"

无法转换类型';System.Linq.IQueryable<;System.Data.Linq.Binary

在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();