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

わんくま同盟

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

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


(過去ログ 155 を表示中)
■90280 / )  Re[2]: C# LINQ IEnumerableからDataTable
□投稿者/ Kawauso (3回)-(2019/02/22(Fri) 11:54:59)
2019/02/22(Fri) 12:08:14 編集(投稿者)
>魔界の仮面弁士 さん
そうなんですね。Csvが0バイトのケースや、列名重複やについてはむしろ例外になってくれたほうがありがたいので、
このメソッドを呼ぶ上位でTry Catchして、エラーをキャッチしたいと思いました。

>WebSurfer さん
正直言うと、僕もワンクッション置く必要無いと思っています。。。
ただ、ジェネリクス型?IEnumerable<string[]>だけで事足りるような気がしますが、
先生がDatatableで作ってくださいって言ってて。。

LINQのこと、僕はあまりよくわかっていないのですが、DataTableでなくても、ジェネリクス型?IEnumerable<string[]>は、
WhereとかGroupbyとかが使えるので、WebSurfer さんが言うように、Jet Provider使って、直接DataTableに入れるか、
あるいは、このまま、IEnumerable<string[]>に対して検索していくかで良いような気がしています。

(今回の課題は、Csvの列は可変で、列の属性とかが読まないとわかんない感じの要件なんです。。。なので、Jetなんとかの、schema.ini は利用できない気がしてます。。
ちゃんと説明すると、条件設定XMLみたいなのがあって、そこには列名と、条件値とかが書かれてて、それを読み込んで、Csvを読み込んで、
Csvに対して、このXMLから読み込んだ条件でDataTableに対して絞り込む感じなんです。)

なので、ちょっと気になるのは、Jet ProviderでCsvからDataTableに入れると、勝手に型指定されちゃって、
あとで、こうやって、
var recSets = dtKawauso.AsEnumerable();
var q1 = from recodes in recSets
         group recodes by recodes.Field<string>("kawausoCol01") into recode
         select new {
             recKey = recode.Key,
             recCount = recode.Count()
         };

クエリ式?でLINQ使う時に、recodes.Field<string>の <型>の部分がわからなくて躓く気がするので、
魔界の仮面弁士 さんがDataTable作るメソッド教えてくれたときに全部 列の属性?を文字型にしてくれてる感じが
都合が良い気がしています。すみません拙くて、、伝わりますかね。。

他にもちょっと躓いてる感じがするので、またちゃんと整理するので、
お聞きしてもよいでしょうか><

今、DataTableに対して、LINQで抽出するのと、DataTableのSelectメソッド使うのとが複合的になってて、
DataTableのSelectメソッドだと、抽出した結果が多いとすごく遅いんです。なんでだろうか。
50000行とかあると、3分とかかかっちゃうんです。

なので、この辺ちゃんとGoogleとか見て、なんで遅いのとかちゃんと整理して解決しなかったら、また聞かせてください。

返信 編集キー/


管理者用

- Child Tree -