2012-05-18 222 views
0

我使用linq查詢來創建我的集合,它基於它的id是一個guid.I是一個可以關聯到一個或多個產品的項目。我需要的是顯示所有與該項目和其他數據相關的產品名稱,如名稱,摘要,日期aswell.My問題在這裏是當我嘗試使用變量我是我的數組中的GUID它引發錯誤,Guid不能轉換爲int.I'm非常確定,我必須將我的Guid數組轉換爲int數組,但不知道如何實現它。下面是我的代碼。將GUID數組轉換爲int數組

 foreach(Guid i in itemid) 
     {   


      var vals = from r in datacontext.ItemTable_s where r.itemID == i select r; 

      ItemTable_s[] tempdata = vals.ToArray<.ItemTable_s>();  

      Facet[] ftemp= new Facet[tempdata.Length]; 

    ItemImage image = null; 
    string s1=""; 



     for (int iv = 0; iv < tempdata.Length; iv++) 
      { 
      s1 += tempdata[i].productname + "\n"; 

      } 

      ftemp[3] = new facet("Productname",facettype.text,s1); 
      collection.AddItem(tempdata[i].ItemName, null, null, 
           new ItemImage(new Uri(-tempdata[i].location)) 
                   ); 




    } 

在我上面的代碼中的TempData [i]是從哪裏獲得錯誤味精說GUID不能被轉換成int implicitly.How修正這個問題還有沒有其他更好的辦法?

+0

請告訴我一個面,什麼是構造函數的參數。 我認爲Facet類的3參數是一個整數而不是一個GUID更符合邏輯 –

+0

您可以將Guid轉換爲整數,但它非常難看。 http://stackoverflow.com/questions/4518684/convert-guid-to-int – rboarman

+0

我的變量我是一個GUID按照我的foreach循環。我的facet都是字符串,但我的tempdata是我的項目guid的數組。 – newuser1555

回答

0

(GUID是128位,因此它不能安全地被轉換成一個32位的整數。)

一個更好的選擇可能是使用一個Dictionary<Guid, ItemTable_s>。然後你仍然可以使用GUID來索引它。

var tempdata = new Dictionary<Guid, ItemTable_s>; 
foreach(var anItem in datacontext.ItemTable_s) 
{ 
    tempdata.Add(anItem.ItemID, anItem); 
} 

那麼這是目前引發異常(s1 += tempdata[i].productname + "\n";)行應該工作原樣。

這也將使您的itemid陣列不必要。或者,你可以保留你使用的兩個數組。那麼你將不得不將該線更改爲:

s1 += tempdata[itemid.IndexOf(i)].productname + "\n"; 

看起來你就是這麼做的。但是這會比使用字典慢得多。這意味着您每次需要確定條目在tempdata的哪個位置時,都會按順序搜索itemid陣列。

+0

感謝suggestion.How做我宣佈到TempData在array.how做我處理的foreach(GUID我的itemid)從r { VAR瓦爾斯=在datacontext.ItemTable_s其中r。itemID ==我選擇r; ItemTable_s [] tempdata = vals.ToArray <.ItemTable_s>(); – newuser1555

0

一個GUID看起來像這樣

7c9e6679-7425-40de-944B-e07fc1f90ae7

正如你可以看到有沒有這個角色的詮釋表現。你的Facet構造函數需要一個GUID而不是int。

+0

但是當我嘗試使用tempdata [i] .description顯示錯誤,說我不能從guid轉換爲int?任何建議。如果沒有必要,我只是不想進入轉換。 – newuser1555

+0

羅伯託有答案 –

2

改變你的邏輯。而不是使用foreach,請使用int for語句。然後從數組中訪問itemid。事情是這樣的:事情是這樣的:

for(int i=0; i<items.Count; i++) 
{ 
    ... 
    var vals = from r in datacontext.ItemTable_s where r.itemID == itemid[i] select r; 
    ... 
    s1 += tempdata[i].productname + "\n"; 
} 

沒試過的代碼,但我希望你明白我的意思...

+0

我試過你的代碼,但它會在我 newuser1555