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を直接変更してもいいと思う。