C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: VB.NET LINQ To Object ディレクトリ


(過去ログ 108 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■64347 / inTopicNo.1)  VB.NET LINQ To Object ディレクトリ
  
□投稿者/ Ante (4回)-(2012/11/28(Wed) 10:58:54)

分類:[.NET 全般] 

皆様、お世話になります。
LINQ to Objectを使用した議題となります。

あるディレクトリ、を参照したいと考えています。
ディレクトリ構造は、↓↓

\\%Server%\YYYY\YY_MM\YYYY_MM_DD\Hoge.txt

検索条件としては以下のような形です。

開始日:2012/06/01 ※テキストボックス
終了日:2012/06/30 ※テキストボックス

上記ディレクトリを入力された、開始日、終了日にてLinqで検索をかけたいのですが、
From Toで検索をかける方法がわからずにいます。

単一であれば、以下のコードで、開始日:2012/06/01 は検索できるのですが、

 Dim wkDir As String = \\%Server%\
 Dim query1 = From myFilePath In System.IO.Directory.GetFiles(wkDir, "*.txt", IO.SearchOption.AllDirectories) _
  Select myFilePath

 Dim query2 = From myDebugFilePath In query1 _
  Where myDebugFilePath Like "*\2012_06_01\*"
  Select myDebugFilePath

 For Each myDebugFilePath In query2
    'なんかの処理
 Next

SQLでいう、Between のように、query2内で一発で検索をかける方法を探しています。

引用返信 編集キー/
■64348 / inTopicNo.2)  Re[1]: VB.NET LINQ To Object ディレクトリ
□投稿者/ Hongliang (18回)-(2012/11/28(Wed) 11:22:46)
2012/11/28(Wed) 11:24:26 編集(投稿者)

Let fileDate = DateTime.ParseExact(myDebugFilePath, "yyyy_MM_dd", CultureInfo.InvariantCulture)
ってやってWhere句でDateTimeの比較してやればいいんじゃないですかね。

追記
あ、パスからの日付部の切り出しも必要か。まあ正規表現とか使って。
引用返信 編集キー/
■64349 / inTopicNo.3)  Re[2]: VB.NET LINQ To Object ディレクトリ
□投稿者/ Ante (5回)-(2012/11/28(Wed) 11:47:19)
BetWeenはないですが、動的にWhere句 を組み立てるとかあるみたいですね。
http://www.atmarkit.co.jp/fdotnet/dotnettips/986dynamiclinq/dynamiclinq.html

見たんですが、ややこしくて自分にはわからなかったので、
結局以下にしました。

            Dim wkDir As String = \\%Server%\
            Dim query1 = From myExeFilePath In System.IO.Directory.GetFiles(_MyWinDir, "*.txt", IO.SearchOption.AllDirectories) _
             Select myExeFilePath

            Dim myCount As Decimal = 0

            Dim dtBirth As DateTime = 開始日
            Dim dtToBirth As DateTime = 終了日

            Do
                If dtBirth > gcInfo.gDataFileToDate = True Then
                    Exit Do
                Else
                    Dim filepattern As String = "*\" & dtBirth.Year & "_" & dtBirth.Month.ToString.PadLeft(2, "0") & "_" & dtBirth.Day.ToString.PadLeft(2, "0") & "\*"

                    Dim query2 = From myDebugExeFilePath In query1 _
                             Where myDebugExeFilePath Like filepattern
                             Select myDebugExeFilePath

                    myCount += query2.Count
                End If
                dtBirth = dtBirth.AddDays(1)
            Loop

一発に検索かけられませんが、仕方ないかな。

解決済み
引用返信 編集キー/
■64350 / inTopicNo.4)  Re[3]: VB.NET LINQ To Object ディレクトリ
□投稿者/ ピノッチオ (1回)-(2012/11/28(Wed) 14:40:15)
ファイルのディレクトリ階層より、年月日は解析できると思うので、例えば引数にファイル名・開始日・終了日をとり、ファイル名から解析した日付が開始日・終了日の範囲内ならTrue(それ以外はFalse)を返すメソッドを用意すれば、例えばこのメソッド名をtestfuncとした場合、LinqのWhere句で

Dim query2 = From myDebugFilePath In query1 _
Where testfunc(myDebugFilePath, 開始日, 終了日)

としてもいいかもしれません。

解決済みのようなので、参考まで。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -