0

products というテーブルの値を含む CheckedListbox があります。アイデアは、顧客に関連付けられている製品をチェックすることです。リンクテーブルに正しく保存されるようになりましたが、再度ロードすると、チェックされた項目が CheckedListbox に正しくロードされません。

したがって、そのリンク テーブルから、1 つの列からすべての行を取得したいと考えています。すべてのテーブルは既にアプリケーションにロードされているため、SQL を使用したくありません。

linq を使用してみましたが、成功しませんでした。ID はここでは空です。

int[] Ids = (from m in dataset.Tables["LinkTable"].AsEnumerable()
                where m.Field<int>("customerId") == customerId
                select m.Field<int>("productId")).ToArray();

次に、それらの Id の取得に成功した場合は、それらの主キーのインデックスを取得して、正しい製品を に設定できるようにしますchecked。このようにするのにうんざりしていますが、グローバルデータテーブルに主キーを設定しているため、プログラムの他の部分でエラーが発生します。Datagridviews はそれが好きではありません。

        DataColumn[] keyColumns = new DataColumn[1]; 
        keyColumns[0] = dataset.Tables["products"].Columns["Id"];
        currentPatient.GetTheDataSet.Tables["products"].PrimaryKey = keyColumns;

        foreach (int Id in Ids)
        {
            DataRow row = dataset.Tables["Products"].Rows.Find(Id);
            int index = dataset.Tables["Products"].Rows.IndexOf(row);
            clbMedications.SetItemChecked(index, true);

        }

主キーを指定せずに最後の部分をやりたいのですが、linqでそれを行う方法が見つかりませんでした。

私はそれが2つの質問で構成されていることを知っていますが、おそらくこれは1つのlinqステートメントで実行できるので、それらを組み合わせたほうがよいでしょう。

4

1 に答える 1