2012-05-18 181 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