0

linqクエリを使用して、GUIDであるIDに基づいてコレクションを作成しています.1つ以上の製品に関連付けることができるアイテムがあります。必要なのは、そのアイテムに関連付けられているすべての製品名とその他のデータを表示することです。 name、summary、dateも同様です。ここでの私の問題は、配列内のguidである変数iを使用しようとすると、Guidをintに変換できないというエラーがスローされることです。配列をint配列にGUIDしますが、実装方法がわかりません。以下は私のコードです。

       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を使用する代わりに、intforステートメントを使用します。次に、配列から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は次のようになります

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

ご覧のとおり、その文字のInt表現はありません。ファセットコンストラクターは、intではなくGUIDを使用する必要があります。

于 2012-05-18T17:30:21.647 に答える
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アレイも不要になります。または、使用している2つのアレイを保持することもできます。次に、その行を次のように変更する必要があります。

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

それがあなたがやろうとしていたことのようです。しかし、それは辞書を使用するよりもはるかに遅くなります。itemidこれは、エントリがのどこにあるかを把握する必要があるたびに、配列の順次検索を実行することを意味しますtempdata

于 2012-05-18T17:32:26.543 に答える