3

C# .NET 3.5 win フォーム アプリに次のクラスがあります。

class Field {

string objectName;
string objectType;
string fieldName;
string fieldValue;


}

およびcheckedlistboxのデータソースであるList fieldList。このリストボックスには、私の fieldList コレクションからのすべての個別の objectNames が表示されます。

fieldNames を含む別の checkedlistbox を作成したいのですが、最初のリスト ボックスには、関連するチェックされた objectName を持つ fieldnames のみが表示されます。

だから私の質問は、objectNames の元のリストの DataSource を照会して、選択した objectName に関連付けられている fieldNames の個別のセットを返すにはどうすればよいですか?

これは読みにくいので、例を示します。

Field1 {

objectName = 'objA'
FieldName = 'FieldA'

}

Field2 {

objectName = 'objA'
FieldName = 'FieldB'

}


Field3 {

objectName = 'objB'
FieldName = 'FieldA'

}

Field4 {

objectName = 'objC'
FieldName = 'FieldC'

}

したがって、チェックボックスで objectNames objA と objB を選択するとします。次に、返されるフィールドは「FieldA」と「FieldB」になります。

LINQ を使用するか、フィールドの一般的なリストをフィルター処理して、これを実現するにはどうすればよいですか? リストで利用できる 'select' または 'where' メソッドを利用できますか?

4

2 に答える 2

2

まず、オブジェクト名を配列またはリストに読み込みます。その部分を真似します。次に、次のようになります。

    string[] objectNames = { "objA", "objC" };
    var hashSet = new HashSet<string>(objectNames);

    var qry = (from row in data
               where hashSet.Contains(row.objectName)
               select row.fieldName).Distinct().ToList();

(編集)

選択した名前(私が偽造したビット)を取得するには、(テストされていません)を試すことができます:

    var selectedNames = namesCheckedListBox.CheckedItems.Cast<Field>()
        .Select(field => field.objectName);
    var hashSet = new HashSet<string>(selectedNames);

(とにかくそうするDistinct()ので、上記で使用する必要はないことに注意してください)HashSet<T>

于 2009-01-24T08:22:33.783 に答える
1
var selectedNames = ... // List of selected names
var selectedFields = (from f in fieldList
                      where selectedNames.Contains(f.objectName)
                      select f.FieldName).Distinct().ToList();
于 2009-01-24T08:09:26.680 に答える