私はチェックボックスの値(チェックボックスのタグに保存されているID)に基づいて人のリストを取得したいと思うdatagridviewを持っています。これらのチェックボックスはコード別にビルドされ、2つの異なるグループボックス(sgbExcursionおよびsgbLanguage)に追加されます。

1回のエクスカーション(上部のチェックボックス)と1つの言語のみを選択すると、フィルタは正常に動作します。
2つの言語(下位のチェックボックス)を選択すると、 "or"として扱われます。選択した言語のいずれかを話す人だけではなく、選択した言語のいずれかを話す人すべてが表示されます。遠足の同じ問題。
ここでは、選択されたエクスカーションと言語のリストを作成します。
List oExcursionID = new List();
foreach (Control oControl in sgbExcursion.Controls)
{
if (oControl.GetType() == typeof(CheckBox))
{
CheckBox oCheckBox = (CheckBox)oControl;
if (oCheckBox.Checked)
{
oExcursionID.Add(int.Parse(oCheckBox.Tag.ToString()));
}
}
}
List oLanguageID = new List();
foreach (Control oControl in sgbLanguage.Controls)
{
if (oControl.GetType() == typeof(CheckBox))
{
CheckBox oCheckBox = (CheckBox)oControl;
if (oCheckBox.Checked)
{
oLanguageID.Add(int.Parse(oCheckBox.Tag.ToString()));
}
}
}
ここで私はデータベースから正しい値を取得しようとします。言語とエクスカーションはどちらも、リレーショナルテーブル(Person_ID、Exursion_ID)または(Person_ID、Language_ID)に保存されます。
var vGuides = (from oGuideToAdd in clsApplication._oDBConnection.tblGuides
where ((from oGuideExcursion in clsApplication._oDBConnection.tblGuideExcursions
where oExcursionID.Contains(oGuideExcursion.ExcursionID)
select oGuideExcursion.GuideID).Contains(oGuideToAdd.ID)
&& (from oGuideLanguage in clsApplication._oDBConnection.tblGuideLanguages
where oLanguageID.Contains(oGuideLanguage.LanguageID)
select oGuideLanguage.GuideID).Contains(oGuideToAdd.ID))
select oGuideToAdd).ToList();
適切な出力を得るために何を変更できますか?