2012-04-24 14 views
2

ユーザーが複数のオプションを選択できるCheckedListBoxのフォームがあります(ディレクトリfilelistをフィルタリングしています - フィルタリングされたファイルは2番目のリストボックスに表示されます)。LINQ条件付きクエリで "Or"を使用する

私は、このようなクエリで使用「または」可能性オプションのセット数を持っていた場合:

Dim query = From f As System.IO.FileInfo In StartList 
    Where f.Name.Contains("Romania") 
Where f.Channel = "Channel1" Or f.Channel = "Channel2" 

しかし、人は、オプション(またはnone)のいずれかの番号をクリックすることができますように私は行うことはできませんこの。 私は、複数のサブクエリを作成してそれらにユニオンを実行しようとするなどいくつかのことを試しましたが、動作させることはできません。

これは、これまでの私のコードです:あなたの助けのための

Dim Channels = ChannelListBox.CheckedItems 

    Dim query = From f As System.IO.FileInfo In StartList 
    Where f.Name.Contains("Romania") 

    If Channels.Count > 0 Then 

     Dim CurrentName As String = Channels(0).ToString 

     Dim Subquery = From g As System.IO.FileInfo In query 
       Where (g.Name.Contains(CurrentName)) 

     For i = 1 To Channels.Count - 1 

      CurrentName = Channels(i).ToString 
      Dim Subquery2 = From h As System.IO.FileInfo In query 
           Where (h.Name.Contains(CurrentName)) 

      Subquery = Subquery.Union(Subquery2) 

     Next i 

     FileListBox.DataSource = Subquery.ToList 

    Else 

     FileListBox.DataSource = query.ToList 

    End If 

おかげで、 アンドリュー

+0

私は[Predicate Builder](http://www.albahari.com/nutshell/predicatebuilder.aspx)はあなたが探しているものだと思います! – Flowerking

答えて

0
Dim Channels = ChannelListBox.CheckedItems 
Dim ChannelNames = From c.ToString In Channels 
Dim query = From f As System.IO.FileInfo In StartList 
    Where f.Name.Contains("Romania") And ChannelNames.Any(Function(n) f.Name.Contains(n)) 

私はVB.NETの経験を持っていない、ましてやLINQと、私は願っています私の構文は正しいです。ここに私がC#で書くものがあります:

var channels = ChannelListBox.CheckedItems; 
var channelNames = channels.Select(c => c.ToString()); 
var query = from f in StartList.Cast<System.IO.FileInfo>() 
    where f.Name.Contains("Romania") && channelNames.Any(n => f.Name.Contains(n)) 
    select f; 
+0

私はあなたに感謝していないので、とても失礼だったことに気付かなかったので、ここで私たちは3年近く遅れました:ありがとう! –

+0

あなたは大歓迎です! :-) – Andrew