2016-08-03 53 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(); 
相關問題