2

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

一定数のオプションがある場合、次のようにクエリで「Or」を使用できます。

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

しかし、人は任意の数のオプションをクリックできる(または何もクリックできない)ため、これはできません。複数のサブクエリを作成してからユニオンを実行するなど、いくつかのことを試しましたが、機能しません。

これまでの私のコードは次のとおりです。

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

助けてくれてありがとう、アンドリュー

4

1 に答える 1

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))

I don't have VB.NET experience, let alone with LINQ, so I hope my syntax is correct. Here's what I would write in 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;
于 2012-04-25T21:37:31.877 に答える