2010-12-14 5 views
0

私は3つのリストボックスを持っています。アイテムをlb1からlb2、lb3からlb4、lb5からlb6に移動します。左側のリストボックスには同じアイテムが含まれています。左側のリストボックスから1つ以上のアイテムが右側の複数のリストボックスに追加された場合、ユーザーはページを送信できないようにします。たとえば、lb1、lb3、およびlb5の項目Aは、lb2、lb4、lb6のいずれかに保存することができ、2つまたは3つに保存することはできません。アイテムが複数のリストボックスに存在するかどうかをチェックする方法? ASP.NET/C#

このチェックは、ページを送信する前に実行する必要があります(また、後でjavascriptで検証を追加します)。これを行う最も効率的な方法は何か疑問です。

すべてのアイテムをリストに追加し、重複がないかどうかを確認します。

ありがとうございます。

編集:このような何か :

  List<string> groupList = new List<string>(); 
      foreach (ListItem item in lbFullAccess.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
      foreach (ListItem item in lbContributor.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
      foreach (ListItem item in lblReadOnly.Items) 
      { 
       groupList.Add(item.Value.ToString()); 
      } 
+0

なぜリストボックスを繰り返し処理してチェックしないのですか?サブリスト作成時にリストボックスごとにDISTINCTを使用するのはどうですか? – Ostap

答えて

0

さて、あなたはそれを行うことができます百種類の方法があります。繰り返しのあなたの提案に間違って何も間違っていません。

あなたはLINQと少し楽しいかもしれない:

public bool AreAllValuesUnique() 
{ 
    // Build up a linq expression of all of the ListItems 
    // by concatenating each sequence 
    var allItems = lbFullAccess.Items.Cast<ListItem>() 
     .Concat(lbContributor.Items.Cast<ListItem>()) 
     .Concat(lbReadOnly.Items.Cast<ListItem>()); 

    // Group the previous linq expression by value (so they will be in groups of "A", "B", etc) 
    var groupedByValue = allItems.GroupBy(i => i.Value); 

    // Finally, return that all groups must have a count of only one element 
    // So each value can only appear once 
    return groupedByValue.All(g => g.Count() == 1); 
} 

各コレクションに(IEnumerableを、結果としてのListItemにListItemCollectionの各要素を変換)キャストを呼び出すのパフォーマンスについて本当にわからないが、しかし、それはおそらくごくわずかです。

関連する問題