0

我正在使用 linq 查询根据它的 id 创建我的集合,它是一个 guid。我有一个可以与 1 个或多个产品关联的项目。我需要显示与该项目和其他数据关联的所有产品名称就像名称,摘要,日期一样。我的问题是当我尝试使用变量 i 时,它是我的数组中的一个 guid,它会抛出 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。我该如何解决这个问题还有其他更好的方法吗?

4

3 回答 3

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";
}

没有尝试代码,但我希望你能明白......

于 2012-05-18T17:33:39.260 回答
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";

看起来这就是你打算做的。但这比使用字典要慢得多。itemid这意味着每次您需要确定条目在哪里时,您都将对数组进行顺序搜索tempdata

于 2012-05-18T17:32:26.543 回答
0

GUID 看起来像这样

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

如您所见,该字符没有 Int 表示。您的 Facet 构造函数需要使用 GUID 而不是 int。

于 2012-05-18T17:30:21.647 回答