1 名前:デフォルトの名無しさん [2008/02/09(土) 23:51:34 ] VisualStudio2008より追加された便利で強力な機能 統合言語クエリ (LINQ : Language Integrated Query) ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。 関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。 DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する 言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。 質問、便利なマイテクニックの発表、いろいろやっちゃってください。
321 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:34:27 ] >>317 考え方はいいとして、>>315 のコードが間違っているのは無視か var sum1 = Table1.Sum(item => item.col1); var sum2 = Table1.Sum(item => item.col2); var sum3 = Table1.Sum(item => item.col3); やるならこうだろ
322 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 14:07:35 ] >>321 確かに間違ってるな。 1クエリで書こうと思うとティマイザに期待しつつこう書くしかないか。 var result = from _ in Table1 new { sum1 = Table1.Sum(item => item.col1), sum2 = Table1.Sum(item => item.col2), sum3 = Table1.Sum(item => item.col3) }).Take(1).First();
323 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 14:08:38 ] ティマイザ→オプティマイザ
324 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 19:41:18 ] >>310 初心者なりに考えてみた。 全然スマートじゃないけど勘弁してね。 var result = table.Select((t, x) => new { seq = x + 1, col1 = t.col1, col2 = t.col2 }).GroupBy(t2 => t2.seq).Select(g=>new { sum1 = g.Sum(t2=>t2.col1), sum2=g.Sum(t2=>t2.col2) });
325 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:05:19 ] var result = table.Select(t => new { col1 = t.col1, col2 = t.col2 }).GroupBy(t2 => 1).Select(g => new { sum1 = g.Sum(t2 => t2.col1), sum2 = g.Sum(t2 => t2.col2) });
326 名前:デフォルトの名無しさん [2009/02/17(火) 18:54:14 ] 初めまして、よろしくお願いいたします。 どうかアドバイスを下さい。 Visual Studio 2008を使っていて、1台の自宅PCにインストールしています。 インストールしているのは、SQLServer2005 developper edtion + VB 2008です。 この環境でC/Sアプリを作り始めました。 経緯としましては、VBアプリを作るのにVSを起動して、プロジェクトの種類でVB、テンプレートで Windowsフォームアプリケーション、をクリックして進み、プロジェクト名をjob_testにしてOKをクリックしました。 VSが起動し、左にサーバーペイン、右にデータソースペインが表示されました。 ここからが問題なのですが、データソースペインがうまく機能しないのです。 1. 「ペインの「新しいデータソースの追加」をクリック 米データソース構成ウィザードが軌道します。 2.「データソースの種類」で「データベース」を選択して「次へ」をクリックして進みます。 3.「データ接続の選択」で「・・・使用するデータ接続」で既存の接続を選択して、 ラジオボタン「はい、重要情報を接続文字列に含みます。」を選択してクリックして進みます。 4.「接続文字列をアプリケーション構成ファイルに保存しますか?」で「次へ」をクリックして進みます。 5.ここ(データベースオブジェクトの選択)でエラーが発生します。メッセージは、「データベースから 情報を取り出すときに、エラーが発生しました。MicrosohutoVisualStudio.datadesignsync. designersync.Facedsync,TableConfigManager のタイプ初期化 子が例外をスローしました」と表示され先へ進めません。 どうか解決方法を教えて下さい。 それと境い目の現象なのでDBのスレにもレスさせて頂きます。ご了承くださいませ。
327 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 07:06:29 ] >>326 マルチ乙
328 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:50:07 ] Microsohuto社製品なんて使うからだな
329 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 04:59:59 ] >Microsohuto社 中国のばったものの会社?
330 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 21:28:41 ] 株式会社精密工具
331 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 00:42:52 ] Linq to Xmlでちょっと質問 <root> <data> <ID>1</ID> </data> <data> <ID>3</ID> </data> <data> <ID>4</ID> </data> </root> というのを <root> <data> <ID>1</ID> </data> <data> <ID>2</ID> </data> <data> <ID>3</ID> </data> </root> に変換するにはどうすれば良いんでしょうか? イメージとしては、IDを指定して<data>ごと削除、でもIDの値は1から順番になるように保つ、という感じです
332 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 00:53:41 ] データが何個あるか調べて、XMLを作り直したほうが早いと思わんかね?
333 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 02:38:35 ] いまひとつイメージがつかめないから、こうゆう解釈で行くよ〜 <data><ID>1</ID><ext at=""true"">hoge1</ext></data> <data><ID>2</ID><ext at=""false"">hoge2</ext></data> <data><ID>3</ID><ext at=""true"">hoge3</ext></data> <data><ID>4</ID><ext at=""false"">hoge4</ext></data> ID=3の行を削除でIDが繰り上がる <data><ID>1</ID><ext at=""true"">hoge1</ext></data> <data><ID>2</ID><ext at=""false"">hoge2</ext></data> <data><ID>3</ID><ext at=""false"">hoge4</ext></data>
334 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 02:42:54 ] string xml = @"<root> <data><ID>1</ID><ext at=""true"">hoge1</ext></data> <data><ID>2</ID><ext at=""false"">hoge2</ext></data> <data><ID>3</ID><ext at=""true"">hoge3</ext></data> <data><ID>4</ID><ext at=""false"">hoge4</ext></data></root>"; var doc = XDocument.Parse(xml); var rs = doc.Elements("root").Elements("data").Where(x => x.Element("ID").Value != "3") .Select((x, cnt) => { var nx = new XElement(x); nx.Element("ID").Value = (cnt+1).ToString(); return nx;} ); var el2 = new XElement("root2"); foreach (var s in rs) el2.Add(s); var doc2 = new XDocument(el2); Console.WriteLine(doc2); 今回は読み込んだXdocumentをいじらないようにしたが、いじっていいなら Linqは使わず最初に読み込んだXDocumentを直接変更してもいいと思う。
335 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:27:35 ] WPF の UIElementCollection に対して、 Linq の機能(Where メソッドとか)を使いたいのですが、 UIElementCollection にはそのメソッドがありません。 どうすれば Linq の機能が使えるでしょうか?
336 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 23:34:03 ] あー、non-generic な IEnumerable に対する Where とかないのか・・・ いったん、 .OfType<UIElement>() っての通すと使える気がする。
337 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 11:49:27 ] OfTypeじゃなくて,元のコレクションに違う型が入ってないことを仮定するCastのほうがベター ※foreach(UIElement item in collection)相当 OfTypeを使うのはOfType<Button>みたいに意図的に型をフィルタリングするときだけ
338 名前:335 mailto:sage [2009/04/16(木) 21:20:12 ] >>336 >>337 ありがとうございました。
339 名前:デフォルトの名無しさん [2009/04/19(日) 23:45:46 ] 良スレなのに過疎ってて残念。
340 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 12:48:21 ] SQLは糞
341 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:09:58 ] 何をもって糞と判断してるのか
342 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 20:08:48 ] 互換領域の文字だからだな
343 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:24:47 ] int[] a = new int[] { 1, 2, 3 }; a.ToList().ForEach(i => Trace.WriteLine(i) ); ForEach するために毎回 ToList() してるんだけど、 ToList() しなくてすむ方法ないの?
344 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:33:14 ] >>343 素直に foreach (var i in a) するか、自分で IEnumerable 用の ForEach 拡張メソッド書くか。
345 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:35:22 ] ttp://neue.cc/2009/04/04_145.html
346 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 22:59:17 ] DataTrigger で特定の Rectangle だけ色を変えようと思って、 TargetName を指定したら、Style では TargetName は指定できないという エラーが出てしまいました。 回避する方法はありますか?
347 名前:346 mailto:sage [2009/04/21(火) 06:16:25 ] すんません、誤爆です。
348 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 15:04:39 ] from age in
349 名前:デフォルトの名無しさん [2009/04/25(土) 15:04:53 ] .
350 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 20:23:27 ] 実際はLINQ to SQLなのですが、 class Order { string syohin; DateTime transactTime; } class SpecialInterval { string syohin; DateTime applyDayFrom; DateTime applyDayTo; } で、Orderは数万件以上、SpecialIntervalは数十件以上あります。 これで、Orderの中から、syohinが一致してなおかつtransactTimeがapplyDayFrom〜 applyDayToの間にあるOrderだけを取得したいのですが、どうしたら いいでしょうか?
351 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 20:46:13 ] from order in context.Order join si in context.Special on order.shyohin equals si.syohin where si.applyDayFrom < order.transactTime && order.transactTime < si.applyDayTo select order ではダメ?
352 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:21:06 ] .NETとVisual Studioってどういう関係ですか? .NETの後継??
353 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 21:32:08 ] .NETは.NET Visual StudioはVisual Studio
354 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:07:37 ] パイナップルと酢豚みたいなもんだな
355 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:08:10 ] >>354 それだと、.NETは要らない子になっちまうじゃないか。
356 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 22:59:46 ] >>354 吹いたww
357 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 23:13:02 ] パイナップルのない酢豚なんて・・・
358 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 13:52:09 ] オレも邪魔だと思ってたが、無いと寂しいw
359 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 14:38:39 ] で、 .NET = パイナップル VS = 酢豚 っていう結論でいいのか?w
360 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:03:50 ] .NET = フレームワーク VS = IDE
361 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:49:45 ] >>360 ありがと!謎が解けました!!
362 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 16:09:02 ] >>244-246 って他社製のプロバイダ使ってってこと?
363 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:18:41 ] LINQ to Object やyield returnを使っていて ふと「これ、何のために使っているんだろう」と思ってしまう。 旧.netと互換性がなくなる上に、実行速度は条件次第(そして多くの場合)落ちるし。 これらの目的は「可読性を上げる」って認識でおk?
364 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:31:05 ] yield return は 2.0 からあるぞ。それより前となると Generics もないので互換性気にするだけアレというか・・・ Linq to Objects は遅くなるのは確かだけどスケーラビリティは あるんだよなぁ。Linq がといったほうがいいかもしれないけど
365 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:35:58 ] とりあえず書いて楽になったとおもわんか? 思わないなら別に使わなくていいだろ。 自分はIEnumerable<T>系を自分のライブラリでも多用してるし、yield使わないでIEnumerable返すコードなんか書きたくもないが。
366 名前:デフォルトの名無しさん [2009/07/08(水) 22:36:57 ] MSはyield使いまくってるよ yieldはフレームワークを作る人のための機能、LINQは使う人のための機能だな
367 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:38:09 ] .NET 4.0 のPLINQに期待。 CTPで試したけど、お手軽並列化はかなり便利だった。
368 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:38:59 ] トン。なるほど。 確かに非常に楽にはなるし、拡張も楽だし、バグも入りにくいと思う。 でも、コードレビューに速度至上主義者がいるとそれが理解されないのよね。
369 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 22:48:23 ] 実際にボトルネックになるような場所でlinq使って叱られるのは当然だが 「なんか遅そうなコード」を見ただけで騒ぐのは 速度至上主義者じゃなくてただの阿呆や
370 名前:デフォルトの名無しさん [2009/07/08(水) 22:49:54 ] 別にそれ自身遅いもんじゃないよ IEnumerableを返すメソッドを手で書いたところでyieldより効率のいいものができるとは考えにくい LINQは素直すぎるだけだ
371 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:08:48 ] 妄想で語っている人多い気はするね、LINQは初回の実行の時はコンパイルが入るから遅いのは分かるが 一度実行されると、二回目からは高速化する構造になっているしね。 LINQを使わない場合は、平均して中速になる。 ある意味LINQを使わないというのはパフォーマンス的には使いやすいかもしれないが、コーディングの楽さとそこそこのパフォーマンスの両得確保を目指すなら LINQは外せないはず
372 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:14:43 ] そういうパフォーマンス厨いるけど、実行速度に影響するのはそういう部分じゃなくデータ構造とか効率的なアルゴリズムとか。 LINQでのパフォーマンスの劣化なんてよっぽどの所でないと誤差の範囲。
373 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:20:03 ] >>371 式木とクエリ式混同してない? 少なくとも、LINQ to object は動的生成一切ないよ。 foreach でコレクション操作するのに比べて、 静的メソッド呼び出しがちょっと増えて、その分のパフォーマンス落ちる程度。 静的メソッド呼び出しのコストなんてほんとたかが知れてて、 ほんの数%の最適化が必要な超クリティカルな場面以外は気にする必要ない。
374 名前:デフォルトの名無しさん [2009/07/08(水) 23:24:03 ] パフォーマンスについては間違ってる クエリ演算子を繋げることによってネストされた列挙子ができて、列挙自体のコストがちょっとだけ増えるんだよ
375 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:26:16 ] ああ、そか。 かかるコストは静的メソッド呼び出し分じゃなくて、 仮想メソッド分になるか<列挙子のネスト。
376 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:27:55 ] なんか適当な事書かれているような気がするぞ foreachなどでやる場合は、連続したシーケンス操作では計算した値を何処かに確保して また計算してというのが繰り返されているのに対して、クエリをバシバシつなげた場合は、中間データが作られないで処理される。 データ処理が縦に輪切りで処理するか横に輪切りで処理するかが変わる この時決定的な差として、キャッシュの使用量がLINQを使った場合の方が小さくなって結果的に高速化するケースは多い。 オレはこっちの効果を重要視している
377 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:29:27 ] >キャッシュの使用量 CPUのデータキャッシュの事ね、今のプロセッサではこれが決定的なパフォーマンスを決める
378 名前:デフォルトの名無しさん [2009/07/08(水) 23:36:57 ] LINQ使うときは最後まで列挙や評価を行わせないのが重要 Reverseみたいに、遅延実行の演算子の中にも危ないのがあるので注意
379 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:37:56 ] yieldは結構便利なことに気付いた。 配列を返させてたところはこれに変えられる。
380 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:38:06 ] >>378 気にしなくていいと思うけどね、よほどの問題が発生しない限り
381 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:00:11 ] >>376 実際のところ、測ってみたら速くならなくない? 1段ラッパーされてる分のペナルティの方が大きくて。 そういうレベルの話よりは、 データ列の処理ってのを1段階抽象化してるから、 LINQ to SQL/Entity みたいなクエリ化もできるし、 PLINQ みたいな並列化もできるしって辺りの もっと抽象度高い話しないと LINQ の価値出ない気も。
382 名前:デフォルトの名無しさん [2009/07/09(木) 00:09:58 ] デリゲート呼び出しのコストがやっぱり大きいんじゃないかな 使い方を変えずにExpressionTreeで一つの大きな列挙子に展開することだって可能なわけで、 そういうところがLINQのポテンシャルなんだろうな
383 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 06:19:38 ] Linqというよりデリゲート単独のパフォーマンスを調べたことがある。 サイズの小さい関数の呼び出しはJIT時にインライン化されるが、 デリゲートで呼び出された関数はどんなに小さいものでもインライン化されないようだった。 関数のサイズを大きなものに変えた場合はどちらもほぼ同じ結果になった。 こういう関数があった場合、 int Hoge1(int x) { return x * x; } // こっちはインライン化されるコード インライン化されない関数の作り方としては、xは-10000以下にならないという前提で int Hoge2(int x) { if (x > -10000) return x * x; : 実際には実行されない大量のコード }
384 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 08:40:19 ] くだらない事やらずに分かりやすく書けやクズ
385 名前:デフォルトの名無しさん [2009/07/09(木) 08:44:04 ] インライン展開はMethodImpl属性で抑制できるぞ
386 名前:383 mailto:sage [2009/07/09(木) 09:18:21 ] すまん、すまん。糞したり飯食ったりしてて続きを書くのを忘れていた。 Enumerable.Whereで条件を指定するところなどLinqの随所にdelegateが使われているわけだ。 その部分をdelegateを使わない形に書き直せば、yieldや拡張メソッドを使っていても、 多重ループで書いたのとそう変わらない結果がでる。 >>382 の >デリゲート呼び出しのコストがやっぱり大きいんじゃないかな に同意と言いたかった。 >>385 おおありがとう。インラインの抑制はそのほうがスマートですな。
387 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 09:36:21 ] デリゲート呼び出しは通常の関数呼び出しの一割り増しぐらいだと外人の誰かがブログでグラフ付きでかいとったな。 ああいうページいつもどこ行ったか忘れちゃうんだよな・・・
388 名前:デフォルトの名無しさん [2009/07/09(木) 09:50:59 ] いかにデリゲート呼び出しが速かろうとベタに書くよりはそりゃ遅くなるに決まってる 最適化できなくなるんだから
389 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 10:00:52 ] だから遅くても許容範囲なんじゃねーのって話だろ。 そんだけ速いの欲しかったらアセンブラで書いとけよ。
390 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:22:47 ] それでも・・・僕はLINQを使うんだ!
391 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 01:06:06 ] LINQで要素に連番をふりたいなーと思ったけど int index = 0; var numbered = from p in source let gomi = (++index) select new { Index = index, Data = p }; と、アホまっしぐらなコードに。 そもそも副作用のある式を入れている時点でマズイとは思うけど これ以外に手はあるんでしょうか?
392 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 01:26:45 ] クエリ式に固執しなければいいんじゃね?
393 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 05:27:16 ] source.Select((Data, i) => new { Index = i + 1, Data }); クエリ構文だとやれることが少ないことに気づくと、だんだメソッド構文ばかり使うようになる
394 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 08:19:37 ] トン こんな便利なバージョンがあったとは。
395 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:21:58 ] C#のLINQは大事なものはほとんど拡張メソッド版になっているよ ムキになってメソッドでやるのもどうかと思うんだが…… VBのXMLリテラルなんぞを見ていると、やっぱ便利だし読みやすいし。 あんまり拡張メソッドに拘って欲しくないんだけどな
396 名前:デフォルトの名無しさん [2009/07/10(金) 22:45:31 ] XMLリテラルってXLINQだろ XLINQ自体は良いものだとは思うけどそんな普及するかどうかもわからない 実験的なものをいきなり言語に組み込むとか
397 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 23:20:37 ] 全然違うような
398 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 00:00:36 ] VBは使ったことはなかったけど…イコールではないよね。 XMLリテラルはXDocumentやXElementといった LINQ to XMLのクラスを使っているだけで。 って、LINQ to Schema for VB SUGEEEE!!こりゃ楽だわ。C#じゃ使えないのか。
399 名前:デフォルトの名無しさん [2009/07/11(土) 00:09:02 ] だからLINQ to SQLみたいにLINQ to XMLがコケたらどうしようもないだろ 言語仕様レベルで依存してるんだから それくらいしないとVBユーザーは新しいものを使おうとしないだろうとか考えたのかな
400 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 00:16:09 ] Linq to Xmlは別にこけるこけないって次元の中身ではないと思うけど。 使ったことないで言ってるでしょ。
401 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 01:13:05 ] Linq to XMLはC#では言語構文の拡張は何もやってない。 使ってるのはLinq to Objectの構文だけで、拡張はクラスライブラリだけ。 VBでは言語構文の拡張もやってて、XMLリテラルもその一種。
402 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:58:43 ] この流れを見て、LINQ to XML触ってみた 書き方はすごく楽だね、こりゃ。 …けど、これってLINQ to XMLで書いてしまうと XMLでデータの不整合や値のレンジ外が見つかった時に XMLのエラー箇所を通知するのが難しい気がする。 例外できないんじゃ実用性って…
403 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 22:02:46 ] あるある。 LoadOptions.SetLineInfoを活用しようとして、 ToDictionaryの代わりにToLookup+重複のないことの検査したり、 Count != 1なら自前の例外を投げてから、Single呼んだりする羽目になっている。
404 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 22:18:29 ] >>402 スキーマ検証周りならベースにまず XmlReader を使え。 XmlReaderSettings で XmlSchemaSet が指定できる XLinq 上でもエラー処理したいときは、読み込み周りのオプ ションで XmlReaderSettings の指定とさらに LoadOptions の SetBaseUri や SetLineInfo オプションも忘れずに
405 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 00:18:20 ] トン、とても参考になった。SetLineInfoはかなり便利そう >>403 後、フィルタ以外を全部取り除いておいて最低限にしておいて データ一個だけ処理する関数を作ってその中で処理したり return from p in hoge.Elements("Hoge") where (int?)p.Value < 0 select CreateHogeInstance(p); ←この中で整合性チェックして例外を投げる 結構マヌケな作りな気がする。
406 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 00:20:28 ] C#なら拡張メソッドがんがん作ってそういうのをチェックしながらのWhereとか例外メッセージつきのSelectとかいろいろ作りゃいいんじゃねーの。 0スタートのindexがくっついてくるSelectWithCountとか自分的に便利。
407 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 04:16:14 ] >>406 それって標準のと何が違うの? msdn.microsoft.com/ja-jp/library/bb534869.aspx
408 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:01:45 ] index 付きの Select、みんなが意外知らない便利機能だけど、 まったく同じ機能を再発明しちゃった人までいるのか。
409 名前:406 mailto:sage [2009/07/16(木) 08:29:31 ] ・・・(´・ω・`) WhereWithCountとか色々作ったのに・・・
410 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 10:22:56 ] 引数なしのAny()とかも影薄いよな Count() > 0とかやっちゃってる人も多そう
411 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 14:36:23 ] 作ってみると意外と簡単でつい自前で作ってしまう。 デバッグ用に意外と役に立ったり。 public static void ToVoid<T>(this IEnumerable<T> src) { foreach (var s in src) {}; } public static void ToVoid<T>(this IEnumerable<T> src, Action<T> act) { foreach (var s in src) act(s); }
412 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 14:51:15 ] 手軽に作れるのが魅力の1つだよな
413 名前:407 mailto:sage [2009/07/16(木) 17:27:01 ] >>410 > Count() > 0とかやっちゃってる人 ……、ごめんなさい。私です。 >>411 それ、自分はC++から来たからForEachって名前にしたい、特に後者。
414 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 17:42:57 ] List<T>との整合性を考えても、ForEachの方がしっくりくるな
415 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 19:36:16 ] >>413 Count使うと最後まで読まないといけないからパフォーマンスが悪いはず Anyは一件あるかないかだから速いはず
416 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 01:05:17 ] ttp://www.infoq.com/jp/news/2009/07/Reactive-Framework-LINQ-Events
417 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 18:41:51 ] ヌルポ
418 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 19:39:22 ] LINQと例外処理ってどうやって組み合わせている? IEnumerableを参照する全ての場所で例外が起こるかもしれない、 となると例外安全の確保をしなきゃならない範囲が滅茶苦茶広くなるし、 任意のtry-catchで捕まえることもできない。 自分は「LINQ中に例外を外に投げる処理は入れるな」で対応している。
419 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:31:27 ] LINQからIEnum処理するところすべてtry-catch(´・ω・`)
420 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 00:16:47 ] それは、不毛過ぎるw
421 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 20:55:08 ] 配列の要素を2個ずつ処理したいときにはどうすればいいでしょうか? ruby の each_slice みたいなのがやりたいのですが。
422 名前:デフォルトの名無しさん mailto:sage [2009/09/14(月) 21:12:59 ] static IEnumerable<IEnumerable<TSource>> Slice<TSource>(this IEnumerable<TSource> source, int n) { var buf = new TSource[n]; int i = 0; foreach (var item in source) { buf[i++] = item; if (i == n) { i = 0; yield return buf; } } if (i != 0) { yield return buf.Take(i); } }
423 名前:421 mailto:sage [2009/09/15(火) 15:00:48 ] >>422 ありがとう。
424 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 21:59:43 ] LINQらしさを追求してみた source.Select((x, i) => new { Key = i / n, Element = x }) .GroupBy(x => x.Key, x => x.Element) .Cast<IEnumerable<TSource>>();
425 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 06:48:18 ] まあどっちでもいいんじゃない? 拡張メソッドはガンガン使うべきなのかは迷うところ。
426 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 21:47:09 ] イベントをLINQっぽく操れるリアクティブフレームワークってのを最近知ってからというもの .NET4.0とラブプラスのことで頭が一杯です。
427 名前:422 mailto:sage [2009/09/17(木) 11:04:44 ] 今更だけど>>422 は使われ方によっては問題があるかも static IEnumerable<IEnumerable<TSource>> Slice<TSource>(this IEnumerable<TSource> source, int n) { var buf = source.ToArray(); for (int i = 0; i < buf.Length; i += n) yield return buf.Skip(i).Take(n); } メモリは食うけどこっちの方が確実
428 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 11:22:16 ] いやSkipやTake使ったらbufの意味がないな こんなの用意して代わりに使うか static IEnumerable<TSource> SkipTake<TSource>(TSource[] source, int skip, int take) { for (int i = 0; i < take; i++) yield return source[i + skip]; }
429 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:10:47 ] 次はforをForEach()にするんですね
430 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:00:29 ] 427のはあまり良くないと思う。 422のyield return bufを yield return buf.ToArray()に変えるだけで良いかと。 あと最後はbuf.Take(i)でいいかな。
431 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:07:12 ] sourceがIList<TSource>を実装しているか否かで場合分けするのが効率的か
432 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:20:03 ] 条件に合うものと合わないものを分けるために、 bar = foo.Select(i=>Baz(i) ); foo = foo.Select(i=>!Baz(i)); みたいに2回Selectしてるんですが、 1回で済む方法ないですか?
433 名前:432 mailto:sage [2009/09/27(日) 19:23:15 ] 間違いました。 where を2回です。
434 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:24:56 ] 欲しいのはどっちなの? 両方ほしいなら2回しないといけないと思うけど。 やりたいことが見えない。
435 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:37:47 ] 両方欲しい場合、自前でループを廻せばワンパスで振り分けできるけど、 Linqで同じようにできないか、っていう質問だろうね。 気持ちは分かるけど多分できないんだろうなあ。 Linqの想定用途はあくまで選択や射影の簡略化だろうし、振り分け処理で 無理矢理Linq使う必要無いんじゃない?と思う。foreachでいいじゃん。
436 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 19:49:14 ] そういうメソッドを自作すればいい。 IEnumerable<T>受け取ってTuple<IEnumerable<T>, IEnumearble<T>>でもを返すようにしてさ。
437 名前:432 mailto:sage [2009/09/27(日) 19:58:37 ] 優先度のある条件を集合に適用する処理を 以下のように書きました。 foreach(var 条件 in 条件リスト){ var マッチしたもの = 集合.Where(条件) 集合 = 集合.Where(!条件) (マッチしたものに対する処理) } というループを書いていたのですが、 ruby の partition メソッドみたいなのがあれば 一回ですむじゃん。 と思ったのですが、ヘルプをみてもわからず、 ググってもわからず、なので質問させていただきました。 処理が重いので1パスにしたいというわけではないので、 2回 Where するままにしておきます。 レスありがとうございました。
438 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 20:11:24 ] やりたいのはこういうこと? Func<int, bool> cond = x => x % 2 == 0; var q = from x in new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, } let b = cond(x) group x by b; var even = q.First(x => x.Key); var odd = q.First(x => !x.Key);
439 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:04:04 ] だね。 ruby の partition メソッドはズバりGroupBy。 ToLookupはその即時評価版。
440 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 02:41:06 ] ToLookupなんてあるんだな。 おもしろそうだからこれを使ってFizzBuzzをといてみた。 var nums = Enumerable.Range(1, 100); var fizzbuzz = nums.ToLookup(num => (num % 15 == 0 ? "fizzBuzz" : (num % 5 == 0 ? "Buzz" : (num % 3 == 0 ? "fizz" : "Other"))), arg => arg); foreach (var group in fizzbuzz) { Console.WriteLine("*****" + group.Key + "*****"); foreach (var num in group) Console.WriteLine(num.ToString()); }
441 名前:デフォルトの名無しさん [2009/10/10(土) 19:43:10 ] プログラミングC#でLINQの項目をちょっと読んでみたが、 C#のコード中に普通にselectとかfromとか書くのは違和感あるなぁ。 C#の予約語になってんのかね?
442 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:44:40 ] >>441 文脈キーワード
443 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 12:02:58 ] LINQって別に最適プランとか計算しないんでしょ? ほんのちょっと前までデータベースからデータを「SELECT * FROM TABLE」で持ってきて コード内でデータの取捨を行うなんて、やっちゃだめの最右翼だったのに、すんげえ 富豪的プログラミングだなあ…。
444 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 12:30:06 ] WHERE句はあるには有るけど 内部で式評価を最適化しているわけではない
445 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 12:54:50 ] Linq to Objectにはプランナはない。命令の順番で処理される。 Linq to SQLやEntity Frameworkの場合はDBMSのSQLに翻訳されるから、 DBMSのプランナが機能する。
446 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:08:08 ] LINQ to SQLって、要するに式ツリーからSQLを生成するORMという理解でOK?
447 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:17:58 ] LINQ to SQLの中身がわかってない奴が多いのな。 とりあえずDataContext.Logで吐かれるSQLを確認するところから はじめたらどうだ?
448 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:29:13 ] ですな。 >>443 のような酷い勘違いは初めて見たけど。
449 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:40:37 ] LINQ to Objectsを最適化するとしたら,DynamicMethodでインライン展開かなあ コード生成のコストが高いからあんまり意味なさそう
450 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:37:17 ] >>446 Whereの条件とかは式ツリーだけど、Where自体は式ツリーでない >>447-448 まあ、LINQ to SQLで生成されるSQLも大概だがな 作成したクエリ(IQueryable)をそのまま変換してるからサブクエリが深すぎて何が何やら
451 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 23:25:35 ] >>446 そう。ただ実行の度に発行される。ToList()すりゃ1回ですむけども。
452 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:34:12 ] /) ///) ノ´⌒`ヽ /,.=゛''"/γ⌒´ \ / i f ,.r='"-‐'つ ""´ ⌒\ ) / / _,.-‐'~ \ / i ) こまけぇことはいいんだよ!! / ,i ,二ニ⊃ (・ )` ´( ・) i,/ / ノ il゛フl (__人_). | ,イ「ト、 ,!,! \ `ー' / / iトヾヽ_/ィ" `7 〈
453 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 12:28:38 ] データは作成する回数よりも参照される回数の方が多いわけで、 キャッシュがないから遅延されても重くなるだけじゃないか? 結局はToList()しまくるハメになっている気がする。
454 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 13:04:29 ] SQLはちゃらっと書く分には楽だな。 最適化とか考えてくとだんだんめんどくさくなりそうだけど。 つーかいい加減データアクセスモデルはナイスな奴一つにまとめてくれ。 Oslo?
455 名前:デフォルトの名無しさん [2009/11/07(土) 19:58:09 ] 確かにMSは昔からデータアクセスの新方式を乱発しすぎなんだよな。
456 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 14:02:34 ] 遅延評価も即時評価も都合に合わせて選択できるってことで 今のモデルで悪くないと思うがな。 そもそも本当にチューニングが必要な場所ならLinqは使わないだろ。 性能云々うるさいやつ向けに..Optimize()あたりを追加してみるか?
457 名前:デフォルトの名無しさん [2009/11/09(月) 17:37:01 ] 手段がいろいろ用意されて軽く破綻してるC++の二の舞ですね パラダイムを混ぜこぜにするとよく起こる
458 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:39:44 ] 結局のところ記述性と性能はトレードオフなんだよ
459 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:55:32 ] え、いや、Linq の遅延評価は記述性って言うか スケーラビリティ?だべ。要素数がドカーンって なっても使えるという意味での。
460 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 02:05:16 ] SelectMany の戻り値に一つだけ要素を足したいです。 今は、 var list = new List<T>(); list.Add(item); list.AddRange(foo.SelectMany(i => bar(i))); のように書いてますが、なんか 冗長な気がします。 1個要素を足すためだけに List のインスタンスを 生成するのは無駄な気がするんですが、 避ける方法ないでしょうか?
461 名前:460 mailto:sage [2009/11/15(日) 02:16:19 ] すまん、Concat を見つけた。 foo.SelectMany(i=>bar(i)).Concat(new[]{ item }); と書けた。 でも、配列生成してんのが無駄な気がするが、 回避する方法ないよね? ( new List<T>(){ item } とかは無しでw)
462 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 03:02:15 ] () => { yield return item; }
463 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:18:15 ] ラムダ内をイテレーターブロックにはできないよ。 やるなら、拡張メソッド追加して、 public static IEnumerable<T> Concat(this T x, IEnumerable<T> list) { yield return x; foreach(var i in list) yield return i; } public static IEnumerable<T> Concat(this IEnumerable<T> list, T x) { foreach(var i in list) yield return i; yield return x; }
464 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:46:45 ] >>461 Enumerable.Repeat(item, 1) で回避。
465 名前:デフォルトの名無しさん [2009/11/15(日) 12:01:40 ] 拡張メソッドにT使えたっけ?
466 名前:デフォルトの名無しさん [2009/11/15(日) 12:17:35 ] Concat<T>が正解ね
467 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:28:58 ] >>464 それたぶん配列作った方が効率的 Rangeで作られるイテレータよりも配列のイテレータの方がずっと速いはず
468 名前:467 mailto:sage [2009/11/15(日) 16:30:40 ] 間違えたRepeatか
469 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:11:22 ] Linq to Object で List 内のデータを取り出した時に、そのデータを変更することはできるのでしょうか? Linq to Object では、抽出するだけなのでしょうか?
470 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:17:14 ] >>469 List 自体の更新? LINQ 以前に、GetEnumerator で列挙してる最中にリストのアップデートかけちゃダメ。 list[i] = xxx; 的なことがしたいって場合も、GetEnumerator じゃ無理。 list[i].Property = xxx; 的なことなら、 foreach (var x in list.Select(xxx)) x.Property = xxx; で可能。
471 名前:469 mailto:sage [2009/12/11(金) 23:15:10 ] >>470 ありがとうございます。 LINQ は便利だなぁと(ソートもしてくれるし), PLINQ にもなるし; 抽出した内容を判別して、データを変更できるんだろうなぁと思っていました。
472 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 14:18:30 ] ちなみに、標準では Foreach メソッドみたいなのないけど、 それを認めると LINQ 中で副作用起こすのを推奨しちゃうことになるから避けたらしい。 list.Select(x => xxx).Foreach(x => x.Property = xxx); みたいなのは邪道。 LINQ 中では副作用は起こさないこと推奨。
473 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 14:47:28 ] なれていない人って偶に int count = 0; var distList = from i in srcList select new { Val=i, Index=++count }; みたいな事をやっちゃうよねw そういうノウハウってどこかにまとまっていないのだろうか? MSDNにLINQの使い方ガイドラインってないよね?
474 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 15:48:41 ] 外部スコープの変数を書き換えるといろいろ副作用が怖いね。 よほど理解して使わないと。
475 名前:デフォルトの名無しさん [2009/12/12(土) 18:32:10 ] 副作用?そんな表現はじめて聞いた。 msが言ってるの?
476 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 18:45:02 ] 一般的な言葉じゃないか? 「ifの中に副作用のある式を書くな」なんて昔から言われているし
477 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 18:50:51 ] Linqというよりそこで使われてる静的クロージャの問題。 .NET2.0でクロージャが実装されたとき有名になったプログラム。 i, j がどんな値になるか想像つく? using System; using System.Collections.Generic; delegate void F(); class Test { static void Main() { List<F> actionList = new List<F>(); for(int i = 0; i < 10; ++i) { int j = i; actionList.Add(delegate(){Console.WriteLine("i={0}, j={1}",i, j);}); } foreach (F f in actionList) f(); } }
478 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 20:20:23 ] LINQの副作用関連でのエンバグは、>>477 以外に遅延評価に原因しているものもあると思う 標準的な使い方である「LINQ中でselect new」すら副作用のある式なわけで (戻り値を使う場所も含め)ちゃんとその挙動まで把握しないと不味い。 var hoges = from p in hoge select new Hoge(p); foreach(var hoge in hoges) { hoge.ValueChanged += Hoge_OnValueChanged(); } foreach(var hoge in hoges) { hoge.Value = 3; } // Hoge_OnValueChanged………? そこまで考慮している保証のないクラスや関数に 値を渡す/返す場合は常にToArray/ToListするのが正解か
479 名前:デフォルトの名無しさん [2009/12/13(日) 03:24:35 ] そりゃそうだろw 何言ってんのw
480 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 03:41:07 ] >477 のは気をつけないと忘れてて、あれうごかねぇとかたまにやるw最近は体が覚えてきたが。 >478 うちのバカエンジニアとかでもおなじようなことしてそうでこえぇ。
481 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 19:31:28 ] >>479 自分一人ならこういうノウハウもすぐに納得して「そりゃそうだ」で済ませれるが、 仕事でチームでやっていると全員がLINQを理解しているわけじゃないから、そうもいかないのよね。 気がつくと新人がコメントに「//なぜかこのToListを外すとぬるぽ」とか書いてたりするw
482 名前:デフォルトの名無しさん [2009/12/14(月) 13:13:04 ] そんなこと言ってたら新しいことなんもできんやろ 未熟な人間にあわせてどうすんねんw
483 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:16:24 ] まともな業務アプリの開発だと、LINQでDBアクセスなんてしないから(つーか、したらバカ) そんなに大して問題にはならない。 クライアントサイドでリスト形式の一時データを参照をする場合になら使える程度だと思う。
484 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 17:30:49 ] そうは言ってもLinqなしでEntityFrameworkを使うのはつらいぞ(笑 自分の理解できないものを嫌う気持ちもわからんではないがね。 そういう人はLinq以前にORMも使えないのだろう。
485 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 22:08:07 ] >>482 新しい技術を導入したらアホがアホなことをしないように、 実装規約やガイドラインを用意しなきゃならんのよ。辛いことに。
486 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 06:45:06 ] LINQ漬けになるとトランザクションを意識しない楽観的な思考になりやすい。 そしてDB更新系で落とし穴に。。。
487 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:32:42 ] TransactionScope 使えるんだし大丈夫じゃね?
488 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:13:23 ] ・意味不明な所で例外が起こってトラブったら、LINQの遅延評価が原因だったでござる。 ・想定外の値が返ってくると思ったら、LINQの遅延評価+キャプチャが原因だったでござる。 ・新人が遅延評価+ソースの値の変更を前提としたコードを作っていたでござる コードの各所に見えない依存関係ができてもうやだ… 自分のコードは副作用のないようにしているが、他人のコードはどこまで追っかけても分からん…
489 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 01:16:01 ] .Selectで検索して全部ToList()すれば?w
490 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 01:49:49 ] 遅延評価前提ってのは別にいいんじゃないの? 後段に更に条件を繋げられるようになるのだから、指針としては悪くない。 キャプチャのほうは本当に注意深くやらなきゃいけないのに、無頓着な人いるよね……
491 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 10:37:33 ] チーム規約で、ToList 必須にしちまえば?
492 名前:デフォルトの名無しさん [2010/01/16(土) 10:40:55 ] キャプチャってどういう意味? わからないから聞いちゃう><
493 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:50:19 ] 頼み方が悪いから教えない
494 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:50:23 ] クロージャで外のローカル変数を取り込むやつかな それを利用して長く状態持たせたりすると凶悪
495 名前:デフォルトの名無しさん [2010/01/16(土) 14:55:39 ] それでもGCがなんとかしてくれるんでしょ? もしかしてunsafeがらみの話?
496 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 15:05:45 ] そういう話じゃなくてさ int i = 0; otherClass.Items = source..Where(x=>x.Value == i++); こんなことされるともうどうなるか分からないだろ OtherClassのItemsの評価回数に依存することになる
497 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:53:13 ] >>496 いいたいことはわかるが動くコードかこうな。 説得力ないから。
498 名前:デフォルトの名無しさん mailto:age [2010/02/04(木) 18:12:53 ] すみません、質問です。 LINQには、バージョンはあるのでしょうか? VS等のバージョンはどんどんとあがっていっていますが、 コードが同じもので動かなくなるかどうかを知りたいです。 例えば、CLRに完全依存の構造なので、CLRバージョンが変わる時に 注意が必要、など
499 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 20:54:49 ] 基本的に上位互換だから気にしなくていい
500 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:27:50 ] すみません、質問です。 LINQで更新や削除は行えるのでしょうか? たとえ行えたとしても、細かい制御が出来ないからADO.NETで ExecuteNonQuery使った方が楽っていう結論になってたりするのかな?
501 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:29:30 ] Linq to SQL Linq to Entity 両方ともORMだから可能。
502 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:52:18 ] いったんエンティティに読み込むから大域処理には向いてないな。
503 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 19:05:38 ] 一括更新用の拡張メソッドを作っている人達もいるな。
504 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 19:26:15 ] テーブルは第3正規化がされているのが普通だし、多数の表の集合演算が入るから 結局はエンティティと対になるストアドプロシージャを組んでしまう。LINQ気持ち悪い。
505 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:36:19 ] LINQは排他制御がきちい
506 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 17:03:06 ] L2Sは更新がちょっとという人は、DataContext.GetCommand(query).CommandTextで取得した WHERE句を元にUPDATE句やDELETE句を組み立てて、DataContext.ExecuteCommand()を実行する ような拡張メソッドを用意するのが良いと思うよ。 そうすれば、更新処理はADO.NETを使ってベタでとかやらずに、トランザクションや排他に ついてはExecuteNonQueryと同じ考え方で設計出来るから。 っで、それ以上の事をやりたくなったらストアドで。
507 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:17:13 ] >>506 結局はSQLを書くってこと?LINQの意味なくない?
508 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 06:55:49 ] この辺を参考に。 ttp://weblogs.asp.net/jeffreyzhao/archive/2008/03/06/linq-to-sql-extension-batch-deletion-by-lambda-expression.aspx ttp://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx
509 名前:デフォルトの名無しさん [2010/02/13(土) 17:28:02 ] Distinct重複は取り除けるけど、重複しているものだけを 取り出すには、どうすればいい
510 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 17:48:11 ] groupbyしてwhere count>2って感じ。
511 名前:デフォルトの名無しさん [2010/02/13(土) 18:48:06 ] >>510 サンクス int[] numbers = { 5, 4, 1, 3, 9, 5, 8, 4, 6, 7, 2, 5, 0 }; var Nums = numbers.GroupBy(num => num).Where(num => num.Count() >= 2); foreach (var x in Nums) Console.WriteLine("{0}:{1}",x.Key,x.Count());
512 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 19:27:29 ] そこらへんはLINQというよりSQLのセンスだよな。
513 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:55:57 ] LINQ 初めて使ってみたけどなんか面白いね ていうか拡張メソッドが面白いのか
514 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:59:49 ] 何も考えずに乱用すると破綻するけどねw
515 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:50:24 ] 基本DBはストアドを呼び出し。もし必要であればEntityの複合型データにLINQ。 という使い分け。テーブルには絶対にLINQでアクセスしない。 MVVMデザインアプローチで組んでいるが、まずLINQの出番はない。
516 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:57:31 ] Linq to Object は使うわ
517 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 22:22:07 ] >>514 やべえ調子に乗って使いまくるところだったww
518 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:04:13 ] 自分は、L2Sに関しては式ツリーからSQLを生成するライブラリだという捉え方。 他のLINQ to ホゲホゲについてはまた別の捉え方だけど。
519 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:06:47 ] メソッド形式のto Objectsは普通に便利 メソッド形式で使ってる限りはループで書くのに比べて見づらくなることもまず無いし
520 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:16:26 ] to IQueryableなものとto IEnumerableなものでは考え方は違うわな。
521 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:03:10 ] LINQはCollectionデータだけを対象にして使う分にはいいね。
522 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:14:49 ] まぁ大抵の感想はそこにいきつく。 無理にLINQtoSQLを使うことはない。
523 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:24:09 ] Expressionで処理を構築するっていう考え方は割と好きだけどね−。
524 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:25:34 ] IEnumerable に ForEach がないのは何でなんだろ
525 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:36:00 ] >>524 副作用起こす系統はLINQの標準には入れたくなかったんじゃないかと。
526 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:36:11 ] >>524 >>472 まぁそれでも作ろうと思えば public static void Foreach(this IEnumerable<T> source, Action<T> callback) { foreach(var i in source) callback(i); } 簡単に自作できちゃうが。
527 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:45:40 ] >>525-526 なるほどー >>526 それ作ったw
528 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 13:40:26 ] C#って3.0以降は標準化されてないけどするとしたらExpression<T>とかdynamicとかどうするんだろう 激しくランタイムに依存するわけだけど全部言語仕様にハードコードするのかな
529 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:27:09 ] お邪魔します。 実はわりと短期間でACCESS+MySQLで作ったアプリを少し拡張して VB.NET2008 Expressに移植しないといけないのです。 ACCESS VBAでO/Rマッピングもどきを自作で実装していたのですが、 コーディング効率アップのためにLINQの採用を検討しています。 ・単純に、"ODBC経由でMySQLにつないでテーブルから任意のカラムを取ってくる" というサンプルソースか手順リストがどこかにありませんでしょうか? ネットで探しまくっているのですが、LINQ布教用のXMLやら配列やらへの クエリのサンプルは見つかっても、実用的なMySQL/ODBCへの接続宣言を どうするのかが見つからないのです。 ・LINQの習得にADO.NETの知識は必須でしょうか? DAO、ADOときて、これ以上、知識の習得に無駄な寄り道は出来れば 避けたいのですが。 みなさん、よろしくお願いします。
530 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:06:51 ] お前にとっては多分無駄な寄り道だと思うからやめとけば
531 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:09:51 ] 普通に考えてそのまんま移植した方が早い
532 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:38:19 ] 探しまくっても見つからないようなもんが なんで効率アップに繋がると思うのがよくわからんわ
533 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:07:19 ] LINQ プロバイダ MySQL でぐぐってわからなかったら無理だからやめておけ
534 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 22:49:42 ] xmlはUTF-8だと思っていたけど、XmlDocument.Load(TextReader) でTextReaderにS-jisエンコードを指定しているコードをみて困惑。 これってどういう意図なんでしょう?
535 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 02:22:37 ] ていうかXMLはUTF-8じゃないというか、何だってありだし。 UTF-8固定ならDeclarationにencodingはいらん。
536 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:47:57 ] まあそういうなよ
537 名前:デフォルトの名無しさん [2010/03/18(木) 01:22:17 ] UTF-8はデフォルトなだけ
538 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 00:55:11 ] なんか来てた Chapter16 LINQとメソッド構文 ttp://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_16/extremecs_16_01.html でもこんな概略の説明なんて既に色々あるんだから、もっと深い奴、 例えばLINQの落とし穴とかそういうところを説明したドキュメントがホスィ
539 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 08:10:45 ] コアな使い方はブログを見て回ればいいんじゃね?
540 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 09:38:37 ] それがマンドクサイのでいろいろとコアなのがまとまってて欲しいのが正直なところ。 いや、そんなことじゃいけないとは思うんだけどね(;´Д`)
541 名前:デフォルトの名無しさん [2010/06/05(土) 19:53:02 ] 今更ながらLINQ便利すぎ! Listに格納したオブジェクトの並べ替えとフィルタが楽すぎて笑った。 並べ替え用のDatatable作ってたりいったい今まで俺は何をやっていたんだろう‥
542 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 19:57:34 ] VB脳乙 Listのソートやフィルタは別にLINQやDataTable使わなくても簡単にできる
543 名前:デフォルトの名無しさん [2010/06/06(日) 00:08:23 ] >>542 わざわざそういうクラスを実装した上でLISTを作ればの話だろ? オブジェクト型のList作って、適当に格納したオブジェクトの対象としたいメンバさえ一致すれば、一行で書けてしまうは凄い。 わかっててやらないと危ういけど‥
544 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 00:18:40 ] Listにソートmethodつければ良いだけじゃん
545 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 01:05:19 ] List<T>.Sort() List<T>.Find() とかないの?使えないの?
546 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 10:17:56 ] その二つはVB使いには使い方が理解しづらいメソッドの定番 LINQも同様に高階関数使ってるけどクエリ式で隠してるわけだ
547 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:33:23 ] 拡張メソッド形式のLINQのわかりやすさは異常。
548 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 00:43:25 ] >>546 なるほど まあC#使いでも foreach(){ if(current==target)...}ってやってるやつもいるな。
549 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 18:47:48 ] 気付いたら>>548 スタイルで書こうとしてて拡張メソッドで書き直すことはたまにあるな あまりにもよく使われるパターンだったから手が覚えてるんだよね
550 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 07:41:28 ] C#, EF4で、ちょっとハマったので質問させてくれ。 DbContextというのがedmxで定義されたコンテキスト、Hogeというのがedmxで定義されたエンティティ型で、 Piyoがedmxとは関係ないクラスだとする。 「DbContext.Hoge.Select(x => new Piyo() { A = x.A, B = x.B })」 みたいな書き方は普通にできて、普通にIQueriable<Piyo>(実体はObjectQuery<Piyo>)が返ってくるよね。 CreateQueryを使って同じようなことがしたいとき(つまりObjectQuery<Piyo>がほしいとき) どうすればいいんだろう? 「DbContext.CreateQuery<Piyo>("SELECT VALUE Piyo (x.A, x.B) FROM Hoge AS x")」 こう書くと、「Piyoなんて型見つからない」って怒られるし、かといってE-SQL内でVALUE Piyoを 指定しないと「MaterializedDataRecordからPiyoに変換できない」と怒られるし(当然だけど)。
551 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:35:37 ] 名前空間は?
552 名前:550 mailto:sage [2010/06/10(木) 15:29:40 ] >>551 Hogeは、型はMyApp.Data.Hoge。EdmEntityTypeAttributeでは「DataModel」が名前空間になってる。 「DataEntities」がエンティティセットの名前空間。 PiyoはMyApp.Something.Piyo。コンストラクタに二つの引数がある。 これを踏まえて 「DbContext.CreateQuery<Piyo>("SELECT VALUE MyApp.Something.Piyo (x.A, x.B) FROM DataEntities.Hoge AS x")」 としてみたけど、だめだった。
553 名前:550 mailto:sage [2010/06/11(金) 10:16:21 ] うーん、そもそもCreateQueryってそういう使い方しないのね。 DbDataRecordで受け取るのが一般的なのか。 IQueriableなのに、後からWhereとか追加できない不思議仕様だ。
554 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:12:11 ] ごちゃごちゃ言わずにソース出せ。
555 名前:デフォルトの名無しさん [2010/06/15(火) 15:18:45 ] これ仕事で使ってる人いる?
556 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:29:00 ] OfType()のおかげでArrayListが大復活。 var al = new ArrayList(); al.Add(1); al.Add(2); al.Add(3); al.Add(1D); al.Add(2D); al.Add(3D); var q = al.OfType<double>().Where(n => n >= 2.0);
557 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:48:14 ] 大復活って、いやいやw せめてList<Object>で……。
558 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 02:06:34 ] ある2つのフォルダ間で同じファイル名かつ更新日時が新しいものをLINQで取得したいです。 IEqualityComparer<FileInfo>を継承したMyCompareを使ってExceptしたのですがうまくいきません。 GetHashCode()で return 1;など定まった値を返せばうまくいくので、GetHashCode()の実装が悪いのかと思います。 しかし、オブジェクトを一意に特定するためのメソッドなのだからそういった実装は間違っていると思います。 もしかしたら全然勘違いをしているかもしれませんが、どなたか助け舟をいただけませんか? よろしくお願いします。 ソース:ideone.com/Ttea4
559 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 04:14:11 ] 比較する際に内部では、最初にGetHashCodeでハッシュコードを取得して、 それが同じ値であったらEqualsで比較する、という動きをします。 なので、GetHashCodeはobj.FullName.GetHashCode()だけ返せばいいんじゃないのかな? LastWriteTimeまで算出に含めるから希望通りに動かないのでは、と思ってみる。 あと、FullNameじゃそもそも「ファイル名」じゃなくてフルパスを取っちゃうから絶対に一致しない。 でも、なんというか、その用途にExceptは違う気もします。
560 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 04:17:39 ] マルチ質問にマルチ回答かw
561 名前:559 mailto:sage [2010/06/24(木) 04:24:52 ] あー、ほんとだ、C#相談室のほうにも同じ質問投げてあったのね。 しかし回答がまるっきり一緒とは……。
562 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:15:15 ] >>559 return obj.Name.GetHashCode(); でいけました。ありがとうございました。 過疎スレに質問をしてしまったと投稿してから思い、相談室にもマルチポストしてしまいました。 LINQが大好きなのでこのスレを監視している方がいてくださって嬉しいです。
563 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:22:28 ] ところで相談室でも言われたのですが、Exceptを使うのは変でしょうか? 私は差集合で解決できる問題なのかなと素直に思いましたが。 単純にファイルの有無ならば差集合でとれる。 →Equalになる条件が違う →ならばその条件を指定してやればいい という段階を踏んでこのソースの形に.なりました。
564 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:32:30 ] 差集合の意味わかってるか?
565 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:35:41 ] 積集合だな だからってIntersectを使うのも不適切だと思う
566 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 22:38:18 ] ああ、ごめんなさい。 もともとの質問がGetHashCode()の使い方についてでしたので、説明不足な点がありました。 実装したい機能は、AのフォルダからBのフォルダにファイルをコピーするというものです。 コピーする対象は、AにあってBにないファイルです。 この時点で私はExceptを採用しました。 その後で、実は同じファイルがあっても更新日付が新しかったら上書きコピーするという仕様になりました。 SQLでかくと SELECT * FROM TableA A WHERE NOT EXISTS (SELECT * FROM TableB B WHERE A.Name = B.Name AND A.LastWriteDate <= B.LastWriteDate) こんな感じになると思います。 これって差集合と違います?
567 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 04:57:51 ] >>550 つ ObjectContext.Translate<TEntity>
568 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 22:58:06 ] 1から見てきたが使いたくなるようなコードがひとつもない しかも直感でわかりにくい
569 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 23:24:39 ] >>568 つ関数型言語
570 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 07:21:36 ] ORマッパーになると聞いたが 具体的にどんなふうになるのん?
571 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 20:57:11 ] >>570 1.エンティティを定義 [Table] public class Table1 { [Column(IsPrimaryKey=true)] pubic int Key{ get; set; } [Column] pubic string Column2{ get; set; } [Column] pubic string Column3{ get; set; } } 2.DataContextを定義 public TestContext :DataContext { public TestContext (string connectionString):base(connectionString){} public Table<Table1> Table1; } 2. DataContextをインスタンス化してLINQでアクセス var dc = new TestContext (接続文字列); var list = dc.Table1.Where(row=>row.Column2=="test").OrderBy(row=>row.Column2).ToList();
572 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 22:52:23 ] >>571 S2Daoとかなら簡単なSQLなら自動生成してくれるのに今更って感じだな
573 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:10:17 ] S2DAO(笑)
574 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:30:48 ] >>571 d JOINとかどうするのだろうかとふっと思った
575 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:47:23 ] >>574 もちろん出来る msdn.microsoft.com/ja-jp/library/bb399397.aspx
576 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 00:45:15 ] >572 えーと自動生成してくれるんだが・・・
577 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 13:47:54 ] joSQLじゃ何故流行らない?
578 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 16:14:48 ] ちょっと困ってるので質問 TableA: Key1 string Key2 string TableB: Key1 string Key2 string Key3 int この2つのTableをleft joinさせる var q=from n in TableA join m in TableB on new {n.Key1,n.Key2} equals new {m.Key1,m.Key2} into z from a in z.DefaultIfEmpty() select new {n.Key1,n.Key2,a.Key3}; そうするとforeachの段階で「a.Key3がnull許容型じゃない」と怒られる 複合キーだからnull許容には出来ないし、そもそもDefaultIfEmpty()って値型はデフォルトの値入れてくれるんじゃないのかと これってどうすれば?
579 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 18:31:19 ] それはLinq to なに?
580 名前:578 mailto:sage [2011/01/27(木) 21:54:36 ] 多分Linq to SQLです 何故「多分」かと言うと、Entityとの違いがわからんからです DBはSQL Server2005です
581 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 23:57:21 ] [TableA] Key1 Key2 hoge fuga foo bar [TableB] Key1 Key2 Key3 hoge fuga 1 [Result] Key1 Key2 Key3 hoge fuga 1 foo bar NULL
582 名前:581 mailto:sage [2011/01/28(金) 00:04:25 ] 途中で送ってしもた 例えばDB上でTableA,Bが上記のような場合、LEFT JOINしたらResultのようになるが、 これを(string, string, int)に入れようとすればエラーになって当然 とりあえず、匿名クラスを(string, string, int?)にすれば良い
583 名前:578 mailto:sage [2011/01/28(金) 14:49:37 ] >>582 ありがとうございます ところでselect匿名型で型指定するにはどう書けば良いでしょうか?
584 名前:デフォルトの名無しさん mailto:sage [2011/01/28(金) 18:22:36 ] >>583 キャスト。 new{ Hoge = (int?)x } みたいに。
585 名前:578 mailto:sage [2011/01/28(金) 19:42:25 ] >>584 ありがとうございました 無事できました
586 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 22:46:26 ] Linqでクロス集計とかできますかぁ?
587 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 22:54:17 ] まあ、そりゃ、ODBCとExcelだのAccessだのでやれてたことはたいていLINQで簡単に書ける。
588 名前:デフォルトの名無しさん [2011/02/18(金) 23:37:45 ] ttp://www.g1sys.co.jp/seminar090515.html にあるような複雑な消費税計算もLINQなら余裕ですよね?
589 名前:デフォルトの名無しさん mailto:sage [2011/02/19(土) 03:20:21 ] 向こうで馬鹿にされたからってこっち荒らすなよ
590 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 21:47:03.67 ] LINQ to DataSet良いね。 DataTable(DataViewだっけ?)のソート機能はいまいちわからない。
591 名前:デフォルトの名無しさん [2011/03/25(金) 21:52:20.02 ] LINQは禁止だけどDataTable.SelectはOKって意味が分からんよな
592 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 21:56:40.88 ] >>591 そんなイミフな規約があるとはかわいそうに
593 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 09:15:06.03 ] >591-592 .NET Framework 2.0を切れない環境とか。 工場なんかだと今だにWin2K使ってたりするしなあ。馬鹿げた話だ。
594 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 09:58:37.70 ] 禁止といったら使えるのに使わせないということだと思ったけど .NET 2だったら元より使えないじゃない
595 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 10:11:54.06 ] 件のプロジェクトは3.5だよ なお除外申請をすればLINQは使えるけど拡張メソッドは全面禁止の模様
596 名前:デフォルトの名無しさん mailto:sage [2011/03/26(土) 10:33:29.03 ] VBならいけるけど組み込みクエリ演算子の少ないC#では何もできないなそれ
597 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 02:01:44.67 ] 拡張メソッドを普通に呼び出すのもダメなのか?
598 名前:デフォルトの名無しさん [2011/03/27(日) 08:09:14.06 ] 分からん 規約の最後の「以下は使用を禁止する」ってリストに「拡張メソッド」「ラムダ式」「LINQ」って書いてあって、 下二つは申請すれば使えるって注釈があった 多分ユーザーに直接聞けば普通にOKされるとは思うが、リーダーと元請が事なかれ主義で申請を弾くんじゃないかと思う 最悪後出しで吊し上げられる可能性もあるから確認する気にもならん
599 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 08:28:01.17 ] 拡張メソッドを自分で作るなってことじゃないのか?
600 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:02:56.77 ] 成果物のソースコードやライブラリを.NET2.0環境でも流用したいとかじゃないの?
601 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:21:50.11 ] あそこがそんなまともな発想で動くはずがない 同じ規約に「stringは参照型だからconstじゃなくてstatic readonlyにしろ」って書いてあるんだぞ? FxCopで何十個も警告出てみんな間違いだってわかってるのに、客がドヤ顔で提示してくるから誰も突っ込まないし
602 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:25:59.03 ] 理由は間違ってるがその規約自体は必ずしも間違ってないぞ privateやinternalならいいが、アセンブリの外から見えるconst定数は バージョン管理上問題があるので非推奨
603 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:38:29.25 ] >602 そういう意味ならstatic readonlyでもダメだろ
604 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:48:55.51 ] >>602 もちろんprivateの話 >>603 ビルド時に解決されるかどうかの違いだろ
605 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 13:17:12.35 ] メモリの節約が目的なのかな? 実際にはインターンされるから節約できるのは 文字列のサイズ×参照元のアセンブリの数 くらいかw
606 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 13:45:11.34 ] .NETやらC#やらを使ってて「メモリの節約が〜」とか片腹痛いよね 馬鹿みたいな要求はそういう小手先だけの最適化()から出てくることが多かったり
607 名前:デフォルトの名無しさん [2011/03/31(木) 14:49:08.10 ] LINQは糞
608 名前:デフォルトの名無しさん [2011/04/02(土) 21:40:07.08 ] 可読性が著しく悪化する
609 名前:デフォルトの名無しさん mailto:sage [2011/04/07(木) 22:52:52.61 ] SQLとかXML使わない人にはLINQって無用?
610 名前:デフォルトの名無しさん mailto:sage [2011/04/07(木) 22:57:19.29 ] コレクションも配列もIEnumerable<T>も使わないなら無用
611 名前: 忍法帖【Lv=10,xxxPT】 mailto:sage [2011/04/08(金) 00:35:23.25 ] じゃあ必要じゃないか!
612 名前:デフォルトの名無しさん mailto:sage [2011/04/08(金) 01:19:05.23 ] えっ
613 名前: 【東電 78.9 %】 mailto:sage [2011/04/08(金) 22:51:39.37 ] バイバイ さよおなら あーりがとー
614 名前:デフォルトの名無しさん mailto:sage [2011/04/08(金) 23:54:00.10 ] あんたー 行かないでー
615 名前:デフォルトの名無しさん mailto:sage [2011/05/16(月) 14:59:59.72 ] おまえらの持ってるLINQの良書ってなんですか? 自分はオライリーのクックブック(LINQは30ページほど)しか持ってないから参考にしたい。
616 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 17:03:55.24 ] MS公式解説書シリーズから自分に適した方を選ぶといい。 プログラミングMicrosoft LINQ LINQテクノロジ入門 >>197-198
617 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 19:19:33.39 ] LINQテクノロジ入門はないな。
618 名前:デフォルトの名無しさん mailto:sage [2011/06/02(木) 19:50:13.55 ] マイクロソフトさん、無敵のC#でエディットコンティニュなんとかしてくださいよォ
619 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 10:32:14.82 ] LINQが素晴らしすぎて もう他の言語では開発する気が起きない身体になってしまいました javaがforを回しているのを見るだけで不整脈になります Microsoftはどう責任をとるつもりですか?
620 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 12:53:35.38 ] よし、じゃあ、J# 復活させろって要望を出しまくるんだ!
621 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 18:17:29.27 ] from i in Enumerable.Range(1,10) ... までやっちゃう奴もいるが、 世の中には適材適所って言葉がだなw
622 名前:デフォルトの名無しさん mailto:sage [2011/06/04(土) 23:25:36.07 ] F#のほうがいいお(´・ω・`)
623 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 00:01:06.96 ] javaとか滅亡すればいいのに
624 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 01:42:03.34 ] LINQ(の出来ること)に限ってはScalaやF#よりC#のほうがいいな。
625 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 02:02:23.62 ] F#つかってるけどLINQは全く使わんな。 DBとかつかうんならまた話は別なんだが、おbじぇctとXMLはつかわんでいい。
626 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 02:14:45.27 ] >>625 ObjectsはSeqがあるから使わないのは当然だと思うけど XMLのほうはLinq to Xml使わなくてどうするの?
627 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 09:55:46.24 ] XMLはElementとかAttributeとるラッパーかましたりSeq化したり。 SQLはクエリーにしないといけないのでそういうわけにはいかんけど。 まぁF#でもうちっとLinqがきれいに書ければいいんだけどね。TypeProvider来たらもう少し変わるんか?
628 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 11:58:43.36 ] XPathかと思ったら・・・
629 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 07:34:52.23 ] Xquery
630 名前:デフォルトの名無しさん mailto:sage [2011/06/09(木) 23:12:42.43 ] あれ?LINQ2SQLだとインデックス使ってくれないとかある? さっきざっくり見た時にvarcharをncarcharに変換するので引っかからないうんたらとか書いてるもあったような気がしたんだが。
631 名前:デフォルトの名無しさん mailto:sage [2011/06/09(木) 23:21:51.44 ] そんなもんスキーマと検索条件次第だろ 自分でDataContext.Log設定して実行計画確認しろよ
632 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 00:45:13.06 ] Logみれというのはごもっともなんだが、明らかにインデックスのはってある絡むだけをwhereで使ってんないんだよね・・・ ちなみにちょと違うかもしれんがこんなのあった。 social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/cfa263a0-fc7b-4da5-982c-901da60236db/
633 名前:デフォルトの名無しさん mailto:sage [2011/06/11(土) 07:50:22.35 ] あ
634 名前:デフォルトの名無しさん [2011/06/26(日) 21:45:11.58 ] まじっすか!!!
635 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 13:00:23.68 ] 複数のテーブルが複数のsdf(SQL Server Compact)ファイルに分散して格納されています。 #テーブル1,2はファイル1、テーブル3,4,5はファイル2など。 このような場合でもLinq to Entitiesで全てのテーブルを連携した検索等を行うことは可能でしょうか? Linq自体これから勉強するところなのですが、仕様を先に決めなければなりません。 ご教示よろしくお願いします。
636 名前:デフォルトの名無しさん mailto:sage [2011/06/28(火) 13:09:40.13 ] >>635 コードの見た目上は連携したように見えるものは書けると思うけど、 sdf ファイルごとにそれぞれ個別のクエリが動くと思う。
637 名前:デフォルトの名無しさん [2011/06/28(火) 21:01:46.09 ] SelectedItems Item Count SelectedIndices Item 上記はそれぞれどのような機能を果たすのですか?その機能を教えてほしいです。 初心者で申し訳ありません。
638 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 00:47:53.20 ] >>636 レスありがとうございます。 EDM(Entity Data Model)を作るときに工夫すれば出来そうですね。 個別のクエリが動くのは目を瞑ることにします。
639 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 02:54:06.93 ] Linq2SqlとLinq2Entityってざっくり何が違うん(´・ω・`)
640 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 08:46:14.33 ] >>639 そもそも開発チームが違う。 LINQ to SQL は言語チームが IQueryable 版 LINQ の参考実装として作ったもの。 LINQ to Entities は ADO.NET チームが作った、ちゃんとした DB アクセスライブラリ。 当然、参考実装が今後保守されるわけがなく。
641 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 09:28:45.92 ] なるー。 で聞きたいのはEntityFrameworkを使ってこれから幸せになれるかなんだが… まっとーなプロジェクトで使ってる人とかおるん?
642 名前:デフォルトの名無しさん mailto:sage [2011/06/29(水) 09:33:23.62 ] 最近、というか、.NET 4世代になってようやく採用増えてるんじゃないな。
643 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 00:31:39.64 ] これは良いスレ。 計測データの収集と抽出にDB使おうと考えてた。
644 名前:天使 ◆uL5esZLBSE mailto:sage [2011/07/01(金) 20:33:00.14 ] >>638 ハアァァァァアァァァァァァァァアアァ???? なるほどゴミなわけだ
645 名前:デフォルトの名無しさん mailto:sage [2011/07/04(月) 00:35:22.65 ] LINQtoSQLはなんだかんだでNET4でもサポートされてる。 なくなるような懸念されてたけどどうもそんな感じではない。
646 名前:デフォルトの名無しさん mailto:sage [2011/07/04(月) 00:39:45.53 ] WP7でLinq to Sqlが乗っかってるから、それ自体がなくなるってのはもうないねー。
647 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 09:51:37.05 ] いまいちわからん。 もともとDBに任せてた SELECT とかの処理をクライアント側でやるってこと?だよね? テーブルのデータを全部クライアントに持ってくるの?
648 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 10:41:45.19 ] 言葉の意味はよく分からんがとにかくすごい勘違いだ
649 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 13:36:20.66 ] テーブル HOGE に 100 件中 10 件のデータの項目A が 10以下だったとして その10件のデータに対してループ処理をしたいとき LINQってまずDBから100件データ取ってきてコード内で指定された条件の10件分だけ選別してループするんじゃないの? それともSQLを自動生成して必要分だけ取ってきてくれるの? あれなんか根本的に間違ってる?
650 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 14:15:04.78 ] オブジェクトでSQLライクな操作を可能にしたのがLINQだろ
651 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 16:10:54.32 ] >>647 全然違う。 LINQ to SQL とか LINQ to Entties は、 クエリ式とか db.Select(x => ...) みたいなメソッド呼び出しから、 式ツリー作って、その式ツリーから SQL 文組み立てて DB サーバーに問い合わせ行う。
652 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 16:41:34.63 ] >>649 まずはLINQ to ObjectとLINQ to SQLの違いを勉強してから来い
653 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 21:35:56.48 ] 詳しくない人は、IQueryableについて調べてから出直してください。
654 名前:デフォルトの名無しさん mailto:sage [2011/07/07(木) 23:26:47.53 ] 教えてください。 クラスの配列を特定の要素でグループ化して、その中で別の要素の値が もっとも小さいモノを取得したいと考えています。 var rows = new classA[] { new classA { id = 1, group = 1, value = 100 }, new classA { id = 2, group = 1, value = 101 }, 以下略 }; こんな感じの配列を group の値ごとに、同じ group をもつの同士の中で value が最小のレコード?を選びたい。 で、LINQ を利用してこんなことをしてみました。(間違いがあっても大目に見てください) var list = from a in rows group a by a.group; foreach( var x in list ) { var row = from b in x where b.value = x.min( y => y.value ); row の保存処理; } 一応これでも期待した動作はするんですが、もっときれいに一発でやれそうな気がします。 もっとよい方法があれば、ご教示いただけませんか?
655 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 01:21:39.32 ] クエリ式じゃないけど rows.OrderBy(e => e.value).GroupBy(e => e.group).Select(e=>e.First()); これでいけるが、groupってプロパティ名は・・・
656 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 01:41:10.34 ] rows.GroupBy(x => x.group).Select(y => y.Min(z => z.value)) groupよりvalueがイヤだ
657 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 05:09:43.01 ] var list = from a in rows group a by a.@group into g select g.OrderBy(x => x.value).First();
658 名前:654 mailto:sage [2011/07/09(土) 00:03:39.81 ] ありがとうございます。 やっぱり出来たんですね。 それぞれの方法で動作を確認しました。 あのプロパティ名は、ここに書くためにわかりやすそうなのを適当につけただけなので。 ご心配には及びません。w 余計な心配をさせてしまったみたいで、すみません。
659 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:12:17.04 ] int[] ia = {0,1,2,3,4,5,6,7,8,9} に対して、並べ替えが ia = {5,6,7,8,9,4,3,2,1,0} となるようなLINQの書き方を教えてください。
660 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:16:43.87 ] それは具体的にどういうルールなんだ その例だけだとたくさんアプローチがあるんだが
661 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:28:28.71 ] 0〜4までのグループ1は降順で、5〜9までのグループ2は昇順で、 グループ2→グループ1の順に並べたいです。
662 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:47:10.41 ] グループ分けは数値の大きさで決定?配列内での位置で決定?
663 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:47:48.84 ] エスパーさんの御指名でしたか
664 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:48:45.38 ] 数値の大きさです。
665 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:53:57.02 ] from i in ia orderby i < 5 ? -i : i orderby i < 5 ? 1 : 0 select i
666 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 16:00:37.66 ] おぉ、OrderByは2つ繋げてもいいんだ。?って初めて見た。 調べます。ありがとうございました。
667 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 16:04:18.40 ] ?は三項演算子、:とセット プログラム書いてる人なら初めてってこたないと思うが まあ誰にでも最初はあるか
668 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 02:11:33.40 ] LINQ始めたてでよくわかってないんですが、C#の場合 var q = array.Where(x => x <= 4).Select(x => x); 配列から4以下の数値を、取り出す文の場合なんでWhereとSelectの中になんでラムダ式が入っているんですか? それとxという変数っぽいのはなんなんですか?
669 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 02:35:06.43 ] Whereならラムダ式でtrueになったものだけひっかけてくれる。 xはWhereのなかなどでラムダ式が呼び出される時にアイテムがセットされる。
670 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 02:53:47.23 ] >>668 そのコードの場合、Select(x => x)は不要だね。 private static bool Predicate(int x) { return x < 4; } と書くのをラムダ式にすると x => x < 4 となるわけで、xは変数そのもの。 もっと展開すれば foreach(var x in array) { if (Predicate(x)) yield return x; } だから、 x は配列中の各要素が来る。
671 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 19:13:40.41 ] >>668 www.atmarkit.co.jp/fdotnet/chushin/roadtolinq_01/roadtolinq_01_02.html ↑これのFigure 9。 x はラムダ式(匿名関数)の引数。
672 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 06:46:39.84 ] >>670 Selectの有無でqの戻り値が変わることもあるよ
673 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 11:18:41.76 ] え?まじで?どういう場合に?
674 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 19:11:17.24 ] 戻り値は変わらないのでは? しいてそういうケースを考えるなら ただの配列に.Select(x => x)だけを足したりなどをすると、 得られる結果は一見同じだけど 型が厳密なIEnumerable<T>に変わるのと、 当然Selectを通るのでパフォーマンスは落ちる。 ただ、今回の場合は前段階にWhereが挟まれているので、何も変わらないね。
675 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 20:44:38.31 ] WhereのイテレータがSelectのイテレータに変わるから全く何も変わらないわけでもない 全く意味のない違いだけど
676 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 21:40:50.63 ] まあ、ReferenceEqualsでもしない限りは。 普通しないと思うし。
677 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 01:02:05.32 ] 皆型までみないのか。
678 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 01:26:27.26 ] LINQはインターフェイス中心だしね。
679 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 19:29:01.07 ] DataTableをSELECTして匿名型になると元に戻すのが大変なんよー
680 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 00:44:37.92 ] 先生早く来ないかな
681 名前:デフォルトの名無しさん mailto:sage [2011/09/04(日) 02:37:18.36 ] >>674 > ただの配列に.Select(x => x)だけを足したりなどをすると、 > 得られる結果は一見同じだけど > 型が厳密なIEnumerable<T>に変わるのと 厳密なってどういう意味だ? IEnumerable<T>の派生型である配列からIEnumerable<T>へと抽象化されるんだが…
682 名前:デフォルトの名無しさん mailto:sage [2011/09/04(日) 02:50:26.04 ] ああ、すまん、>>675 って意味か…
683 名前:デフォルトの名無しさん [2011/09/06(火) 13:26:26.01 ] 現在 asp.netで開発しております。 初心者です。 下記のようなXMLファイルを八百屋のIDを条件に 果物、野菜、缶詰の在庫の判定を行いたいのですが、 うまくいきません。 ご教示ください。 XMLの読み込みはLinqを使用しています。
684 名前:デフォルトの名無しさん [2011/09/06(火) 13:29:04.49 ] Dim xmldoc As XElement = XElement.Load("C:\test.xml") Dim query = From c In xmldoc.Descendants("八百屋") select c (ここからの条件が解りません) For Each result In query Dim Apple As String = result.Element("リンゴ").Attribute("在庫").Value Dim Mikan As String = result.Element("みかん").Attribute("在庫").Value 上記のような感じで属性を取得していきます。 Next 宜しくお願いします。
685 名前:デフォルトの名無しさん [2011/09/06(火) 13:32:18.03 ] <設定内容> <八百屋 ID="001"> <果物> <リンゴ 在庫="YES"/> <みかん 在庫="YES"/> <メロン 在庫="NO"/> </果物> <野菜> <大根 在庫="NO"> <白菜 在庫="YES"> </野菜> <缶詰> <桃 在庫="NO"> <みかん 在庫="YES"> </缶詰> </八百屋> </設定内容>
686 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 20:24:12.34 ] こっちが聞きたいわ 「八百屋のIDを条件に」「在庫の判定」の具体的な条件は?
687 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 21:03:19.46 ] ちょっとやりたい事が伝わらない… こんなこと? Import System.Xml.XPath Dim qry = From c In xmldoc.XPathSelectElements("設定内容/八百屋") Where c.Attribute("ID").Value = "001" Select c ※ qryは八百屋ノードの列挙データ てかたぶんやりたいことはLINQじゃなくて、XPathの方がすっきりするような気がする…
688 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 21:59:22.20 ] from item in xmldoc.Descendants("八百屋") let 果物 = item.Element("果物") let 野菜 = item.Element("野菜") let 缶詰 = item.Element("缶詰") select new { HasApple = 果物.Element("リンゴ").Attribute("在庫").Value == "YES", HasPeach = 缶詰.Element("桃").Attribute("在庫").Value == "YES" } みたいな感じでしょうか?VBも多分同じ感じなはず。
689 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 17:12:16.76 ] 親子構造テーブル検索をしたいのですが、一発で取得する方法はありますか? スキーマがID,親IDとなっていて、 A,null-+-A1,A +-A2,A-+-A21,A2 B,null-+-B1,B +-B2,B +-B3,B-+-B31,B3-+-B311,B31 データがこのようになっていた場合、ID:Aで検索をかけてA,A1,A2,A21を取得したいです ルートレコード(A)は取得できなくても構いません また、A○やA○○と連番風になっていますが、実際はGUIDで、ID文字列中に親子を類推できる情報は一切ありません よろしくお願いします
690 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 21:34:54.14 ] 分かりにくいし、データ構造の指定もないから逆に答えずらいわ… private class A { public string ID { get; set; } public string Parent { get; set; } } var l = new List<A>(); l.Add(new A() { ID = "A", Parent = null }); l.Add(new A() { ID = "A1", Parent = "A" }); l.Add(new A() { ID = "A2", Parent = "A" }); l.Add(new A() { ID = "A21", Parent = "A2" }); l.Add(new A() { ID = "B", Parent = null }); l.Add(new A() { ID = "B1", Parent = "B" }); l.Add(new A() { ID = "B2", Parent = "B" }); l.Add(new A() { ID = "B3", Parent = "B" }); l.Add(new A() { ID = "B31", Parent = "B3" }); l.Add(new A() { ID = "B311", Parent = "B31" }); string sel = "A"; var ret = new List<A>(); l.ForEach(x => { if (x.Parent == sel || ret.Any(y => y.ID == x.Parent)) ret.Add(x); });
691 名前:689 mailto:sage [2011/09/09(金) 12:38:38.00 ] >>690 すみませんターゲットはSQLServer2005でした でもこれでできそうなのでやってみます ありがとうございました
692 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 03:26:25.43 ] 学校の宿題であることを願うばかりだ・・・
693 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 16:31:03.33 ] テーブルをNodes (ID uniqueidentifier, ParentID uniqueidentifier)とすれば、SQLでもEntitiesでも class Node { uniqueidentifier ID { get; set; } Node Node { get; set; } // ParentIDのリレーション (i.e. 親Node) } こんな感じのクラスになるはずだから、何も悩む必要はないと思うが?
694 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 10:53:41.53 ] int[] data; 省略 init max = data.Where(e => 条件).Max(); このとき、条件に一致するのがなかったときシーケンスが空っぽだよって例外が出るよね だからといって var seq = data.Where(e => 条件); if(seq.Count > 0) { max = seq.Max } ってしようとするとintと比較できないってコンパイルエラー出るし、 結構不便だよね
695 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 13:26:40.48 ] seq.Count()だろ でも一つ含まれてればいいんだから if (seq.Any()) の方がいい 一行で書くなら int? max = data.Where(e=>条件).Select(e=>(int?)e).DefaultIfEmpty().Max(); かな
696 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 05:59:38.55 ] >>695 了解
697 名前: 忍法帖【Lv=8,xxxP】 [2011/11/10(木) 08:11:23.35 ] a
698 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 20:38:38.84 ] linqでcsvファイルを二次元配列に読み込むこと出来ますか?
699 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:41:37.84 ] 出来ますん
700 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:45:40.19 ] LINQ使うなら二次元配列はすごく相性悪いから捨てろ(そうでなくても多次元配列は終わってるから使うな) 配列の配列を使うことにして、エスケープとか考えないなら string[][] csv = File.ReadLines("hoge.csv").Select(line=>line.Split(",").ToArray()).ToArray();
701 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 05:02:02.84 ] 二次元配列でなくて、CSVの1レコード(1行)に当たるクラスを作って、 そのクラスの配列ないしList<T>として読み込むなら、LINQ to CSV使えば一行で出来る var hhh = new CsvContext().Read<作ったクラス名>(str, new CsvFileDescription { TextEncoding = Encoding.UTF8 }).Distinct().OrderBy(x => x.ID).ToArray; みたいな感じで (上は、念のため重複覗いてID順に並べたりしてる)
702 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 05:04:41.12 ] ↑ ちなみに str は読み込むCSVのファイル名を入れた変数
703 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:08:43.31 ] www.codeproject.com/KB/linq/LINQtoCSV.aspx
704 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 14:02:24.01 ] 質問なんですが、下のプログラムにてlinqでスマートに最後の行の状態にしたいんですが、 どういった方法がありますか? var collection = new[] { 1, 2, 3 }; //これを collection = ? //var collection = new[] { 1, 2, 2, 3, 3, 3 }; //こうしたい
705 名前:704 mailto:sage [2012/01/27(金) 14:15:34.18 ] すみません自己解決しました var result = collection.SelectMany(i => Enumerable.Repeat(i, i));
706 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 12:15:10.64 ] LINQでループ処理 何得ですね。 Enumerable.Range(0,length).All(i => { dosomething(i); return true; });
707 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 18:29:22.29 ] 単なるループなら無駄だけど、N個の「なにか」が欲しいときは便利だね。 [LINQ] var items = Enumerable.Range(0, N) .Select(i => new Foo(i)) .ToArray(); [for] var list = new List<Foo>(); for(var i=0;i<N;i++) items.Add(new Foo(i)); var items = list.ToArray();
708 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 22:06:01.26 ] アイドルが同じ名前を使ってるけど、 これって、商標権的にどうなの? ja.wikipedia.org/wiki/LinQ
709 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 02:33:39.10 ] LISPとかもいましたし
710 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 02:42:37.61 ] >>708 これは酷い
711 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 08:30:57.04 ] >グループ名のLinQは"Love in 九州"からの造語であり、またアイドル活動を通じて様々なものを"リンク"するという意味も込められている。 それならLinKにしろよ。。。
712 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 08:58:56.23 ] 九州の意味でQを使うのは、ローカルSFコンベンションの「Qコン」とか、 わりと古くから歴史がある(あの米澤さんも参加したことがある大会、のはず)。
713 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:12:39.82 ] LINQが考えなしのアイドル?だかに汚された
714 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:34:17.58 ] >>708 専門家ではないが、分野が異なれば(明らかに別物と分かるので)問題ないはず この場合だと、 LINQの技術書買おうとして間違って写真集買ってしまう とかありえんだろ
715 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:45:19.45 ] 最初は良スレだったのにネタが尽きたか
716 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 08:35:59.17 ] 昔秋葉原の楽器屋にORACLE Masterの参考書が売ってて なんでかなと思ったらSOLってソフトの本と間違えてたみたい。 NoSQL系でLINQネイティヴ対応のが出れば流行るかねー MS以外にポートしないとダメか
717 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:20:54.78 ] 【消しゴム】MONOを使ってみるスレ4【じゃない】 toro.2ch.net/test/read.cgi/tech/1329023778/
718 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:50:47.06 ] アイドルはLinQでMSのはLINQだ
719 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 00:59:43.14 ] theinterviews.jp/linq/3146658 LINQネタにも返してくれてるしそんなに怒るなよw
720 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:34:42.96 ] アイドルも大変だなw
721 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 04:23:02.45 ] 律儀に返してるのかw
722 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:01:16.95 ] ステマスレとして終息か
723 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 07:12:16.27 ] 特定PCのみ、LINQ to EntitiesのLINQのクエリ構文だと 単純なクエリでもtimeoutするくらい遅いのですが、 なにか分かりますか?ExecuteStoreQueryなら同等でも一瞬なんです。 ・遅い Using context As New Entities Dim hoge = (From a In context.hoge Where a.hoge = "xx").ToList() End Using ・速い Using context As New Entities Dim hoge = context.ExecuteStoreQuery(Of hoge) _ ("select * from hoge where hoge = 'xx') End Using 前者だと高い確率で以下が出ます。後者は全く出ません。Entitiesは同じものです。 {"Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 現在のコマンドで重大なエラーが発生しました。結果は破棄しなければなりません。 サーバーから結果を受信しているときに、トランスポート レベルのエラーが発生しました。 (provider: Session Provider, error: 18 - ピアによって接続が閉じられました)"}
724 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 11:03:37.78 ] サーバー一緒か? いずれにしてもクエリーフックしてどう違うかみて、そのクエリーを単体でやったらどうなるかとかより切り分けれ
725 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 10:55:47.07 ] >>724 サーバーも一緒です。接続文字列は変えていません。 ToTraceStringでクエリを抜きだしてみましたが、後者のクエリに全てのフィールドを 指定しているくらいで、他は同等でした。 ただ、SSMSで実行してみると、同様の現象は再現できました。・・のでEFは関係なさそうです・・ 実行する度にレスポンスが返るのが遅くなります。 1回目:0秒、2回目:2秒、3回目:8秒、4回目:24秒、5回目:60秒・・というように。。 * だと実行を何度連打しても0秒で返ります。 DBの専用スレで聞いてきた方が良いですよね。。ありがとうございました。
726 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 13:03:56.26 ] 件数がアホみたいに多いとかじゃないの ToListしてるってことは即時全結果返すってことだから
727 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 13:13:47.69 ] >>725 100件程度です。問題になる件数ではないと思います。First()でも同様でした。 あとsqlserverの専用スレで聞いてきましたのでマルチポストになってしまいますし、 こちらは閉め切ります。ありがとうございました。
728 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 09:49:47.53 ] なってしまうじゃねえよ死ねカス
729 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 10:11:31.00 ] 聞いてくるって事前に書いたろうが。失せろクズ
730 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 19:48:13.25 ] 結局はVMのせいか。なんでCPUって思ったんだろうね。
731 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 14:48:44.96 ] VBだとFunction(x)とかの記述キチガイじみてるけど デバッグ中に他の箇所修正できるとこは 使い捨てプログラム作るときはうらやましいな
732 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 14:54:02.15 ] 俺はC#の方がキチガイに見えるw x=>とか象形文字かよソレ。 なんか調べてるとき、vb読みに脳内変換するのがツライです・・
733 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 16:13:40.13 ] そのうちIDE上でVB/C#のリアルタイム切り替えができる時代が来る
734 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 19:23:41.81 ] >>732 VBにもラムダ式あるだろ
735 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 20:07:38.46 ] そうだが、なにを言ってるんだおm
736 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 20:34:12.10 ] ミッドチルダ式とベルカ式どっちが好き?
737 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 21:51:23.02 ] オギノ式
738 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:30:23.44 ] LINQは必ず全部探索するのが嫌 木構造のグラフがあるとき条件を満たしたら早期打ち切り、 みたいな処理が書けない
739 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:57:56.60 ] Any() みたいなのは見つかった時点でやめてるんじゃね?
740 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 23:57:33.89 ] うん
741 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 18:01:26.34 ] AsParallelってCPUリソース食う以外のデメリットってある?あんまり見ないなと・・
742 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 18:16:29.27 ] 並列化させると結果の順番が保証できない。 オプションで保証できるけどそれだと並列化の効果が落ちる。
743 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 19:02:00.50 ] ほうほう。なるほど。d
744 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 22:38:59.20 ] 結局要件次第なわけだけども… そこまで強烈に並列性を求められて、かつ、並列化に向いてる処理ってのが、業務とかだとほとんどないはず。
745 名前:デフォルトの名無しさん mailto:sage [2012/08/07(火) 05:22:08.32 ] 異なるURLに対して一斉にHTTPでデータ取ってくる処理とかかな
746 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 00:47:56.74 ] >>745 そういうのはParallelでやっちゃダメ。 Task.WaitAll もしくは、4.5で入る Task.WhenAll でやらないと効率悪い。
747 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 01:03:58.30 ] 横から補足すると ParallelはCPU負荷が低いと並列度を上げるために新しいスレッドを立ち上げる。 そのためネットワークIO待ちで使うと数十のスレッドが次々と作られて非効率的。 スレッドの立ち上げは重い処理だし、メモリ使うし、切り替えにもオーバーヘッドかかるしでいい事ないよ。
748 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 10:13:12.64 ] すべてのクエリ文はobj.Where(〜).Select(〜〜)みたいなメソッドチェーンに置き換え可能なんですか?
749 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 16:38:48.52 ] >>748 そりゃ、仕様書にそう明記されてるからなぁ。 クエリ式はメソッドチェーンへの置き換えで実装しますって。
750 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 16:02:22.16 ] Zelda対応はいつになりますか?
751 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 21:01:37.80 ] 一瞬なにかと…。リンクね。Legend of Zelda なら店頭へ
752 名前:デフォルトの名無しさん [2012/09/14(金) 12:08:02.54 ] オフィシャルなドキュメントってmsdn.microsoft.com/ja-jp/library/vstudio/bb387098.aspx なんですか?何か右欄のスペースが凄い見にくい・・・。
753 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 14:09:00.18 ] <root> <question> <qtext>にしむらひろゆき?</qtext> <correctid>3</correctid> <choices> <choice> <choiceid>1</choiceid> <ctext>MS</ctext> </choice> <choice> <choiceid>2</choiceid> <ctext>Apple</ctext> </choice> <choice> <choiceid>3</choiceid> <ctext>2ch</ctext> </choice> </choices> </question> </root> 上のようなXMLがあったとして 「にしむらひろゆき?:2ch」という結果を得たい場合、どのようにすれば良いでしょうか? XDocument xdoc = XDocument.Load(@"c:\sample.xml"); XNamespace ns = "2ch.net "; var q = from n in xdoc.Descendants(ns + "question") where (string)n.Element(ns + "correctid") == (string)n.Element(ns + "choiceid") select (string)n.Element(ns + "qtext") + ":" + (string)n.Element(ns + "ctext"); こんな感じでは上手くいきませんでした。
754 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 22:44:52.58 ] var x = from q in xml.Descendants("question") let id = (string)q.Element("correctid") let qt = (string)q.Element("qtext") from choice in q.Element("choices").Elements("choice") where (string)choice.Element("choiceid") == id select qt + ":" + (string)choice.Element("ctext"); XNamespaceは略
755 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 22:57:50.31 ] >>754 ありがとうございます! 「let」句を使うのですね。使い方もちゃんと調べておきます。
756 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 23:02:47.39 ] いやlet句はこの場合楽できるぐらいの意味しかない from句を重ねて使用するのが肝
757 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 10:41:08.80 ] LINQ便利だけど、ローカル変数検索なんかで使う場合だと、遅いんだよね。 そろそろCLがコンパイル済みの最終実行状態を出力してくれればいいのに。。
758 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 10:43:41.46 ] >>723 思いっきりTimeoutって書いてあるじゃねえかwww
759 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 21:35:58.16 ] さっき勉強したんだがLinq気持ちよすぎ精子吹いたwwwだれかC++に移植してくれ
760 名前:デフォルトの名無しさん mailto:sage [2012/09/17(月) 14:19:32.69 ] c++でも使えるだろ
761 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 17:16:21.87 ] >>759 Ovenとかどうよ p-stade.sourceforge.net/oven/doc/html/index.html
762 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 04:17:21.52 ] where区で条件を動的にする方法はありませんか?
763 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 09:53:53.12 ] >>762 (1)パラメータクエリで解決するケース (2)さらに、and や or の条件が増えたり減ったりするなら、文字列をつぎはぎ (3)実はSQL文で結合とかいろいろ熟練すれば解決するケース のどれなんだろうな
764 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 10:17:54.51 ] 変数と変数の比較なら動的じゃないか。
765 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 18:39:25.06 ] 三項演算子使えばいけそうだな
766 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 21:37:04.90 ] 誰もが通るスパゲッティ率最高のSQL組立
767 名前:デフォルトの名無しさん [2013/02/01(金) 13:55:35.49 ] class Data { public List<Item> Items = new Items(); } List<Data> dat = new List<Data>(); // ↑のdatリストから各Itemsプロパティの中身を全て抜出し、 // 1次元配列として得るにはどうしたらいいでしょうか?
768 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 16:52:24.22 ] >>767 foreachで列挙しつつ、AddRange クエリ文だけで済ませるのは難しいかもね。
769 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 17:14:16.34 ] >>767 Item[]にしたいということなら dat.SelectMany(x => x.Items).ToArray();
770 名前:デフォルトの名無しさん [2013/03/30(土) 19:52:58.27 ] IEnumerableとかIQueryableとかって会話で使うとき なんて発音してる? 遅延実行のナイスな活用例って 無限リストとか馬鹿でかいデーターソースしかないのかな 処理時間を確定させたくていつもToListしちゃう
771 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 21:04:48.54 ] アイエヌュムェラボー アイクェリャボー
772 名前:デフォルトの名無しさん mailto:sage [2013/04/01(月) 15:49:06.61 ] 愛イニュメラブル 愛クエリアブル
773 名前:デフォルトの名無しさん [2013/04/03(水) 23:53:18.12 ] アイナマーエーブル イクォータブル
774 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 11:04:11.27 ] INumerable? Equatable?
775 名前:デフォルトの名無しさん mailto:sage [2013/04/05(金) 01:05:00.06 ] from x in xvideos where x.tag.Contains("anal") select x; /* 夜プログラミング部 */ engawa.2ch.net/test/read.cgi/poverty/1365090013/
776 名前:デフォルトの名無しさん [2013/04/18(木) 11:29:49.06 ] エロい人おしえてくり。 string[] testdata = {"BT","SS","TB","MCQ","AABC","NT"}; string[] result = testdata.Where(p => p.Length == 2 ).ToArray(); だと {"BT","SS","TB","NT"} が帰ってくるのですが、中の順番が乱れることはないって保障されているのでしょうか? 保障されていないのなら元の順番をでSortすることは可能でしょうか?
777 名前:デフォルトの名無しさん mailto:sage [2013/04/18(木) 11:45:38.06 ] 配列のイテレータは順番が保障されている。 Whereはフィルタだけで順番の変更はしない。 並べ替えたいならOrderBy >...ata.Where(p => p.Length == 2).OrderBy(s => s).ToAr...
778 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 07:29:14.20 ] 課題が解けずに困ってます。教えていただけませんか? VBはスレ違いでしたらすいません。 スペースが文字化けしてしまうので-で代用しています。 Dim-;Inpdata,OutData-As-String Dim-;RecordCnt-As-;Integer Using-sr-As-;New-StreamReader(Text1,Shift_JIS),_ -sw-As-New-StreamWriter(Text2,Shift_JIS) -Do-While ;Sr.Peek>=0 ---RecordCnt=RecordCnt ;+ ;1 ---OutData=;InpData ---sw.WriteLine(OutData) Loop 上記コードについて以下のように処理するようコードを変更もしくは追加しなさい。 (変更or追加するところだけ教えてください) 1.変数InpDataの2桁目から4桁目の値に従い、文字属性の変数Age5に次の値を代入。 (000-004のとき01、005-009のとき02、010-014のとき03、015-019のとき04) また出力ファイルの各レコードの末尾にAge5の値を付与して出力する。 2.変数InpDataの2桁目から4桁目の値が変数Ageと等しいレコードのレコード数(変数Cnt)をカウントする。 すべてのレコードについて処理が終了したら「該当レコード数/総レコード数」を画面に表示する。
779 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 08:27:19.55 ] Dim Inpdata, OutData As String Dim RecordCnt As Integer Using sr As New StreamReader(Text1, Shift_JIS), sw As New StreamWriter(Text2, Shift_JIS) Do While sr.Peek >= 0 RecordCnt = RecordCnt + 1 OutData = InpData sw.WriteLine(OutData) Loop
780 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 08:47:25.25 ] LINQ関係ないな あとinpdataが空っぽのままだ
781 名前:デフォルトの名無しさん mailto:sage [2013/05/09(木) 23:35:28.70 ] 外部結合これでいいの? ideone.com/W9XtxR 書き方が直接的じゃなくて気持ち悪いんだけど
782 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) 17:17:19.92 ] linqは結局流行らなかったね
783 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) 18:16:40.42 ] >>782
784 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:35:45.77 ] where節とかで何個溜まったらそこまでって出来ないのかな?
785 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:03:51.88 ] ちょっと意味が分からんが Takeのことか?
786 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:05:58.53 ] TakeWhile使え
787 名前:デフォルトの名無しさん mailto:sage [2013/09/05(木) 22:02:37.88 ] ありがとうござます そんな関数もあるのですね enumerableのメンバ関数を勉強してみます