1 名前:デフォルトの名無しさん [2008/02/09(土) 23:51:34 ] VisualStudio2008より追加された便利で強力な機能 統合言語クエリ (LINQ : Language Integrated Query) ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。 関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。 DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する 言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。 質問、便利なマイテクニックの発表、いろいろやっちゃってください。
285 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:50:21 ] 4.0の紹介ビデオみてるが、よいなぁこれ・・・ 来年早々にも出してくれんかな・・・
286 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:11:04 ] PLINQとか並列化関係いいなぁ・・
287 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:04:48 ] 4.0の紹介ビデオってmsdnにある?
288 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:12:26 ] channel9.msdn.com/pdc2008/TL16/ ちなみに、パスを1段削って、 channel9.msdn.com/pdc2008/ にするとPDCのセッションの一覧が出てくる。
289 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:31:16 ] thx
290 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 01:31:48 ] C#インタプリタ、すげぇ!
291 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 09:38:50 ] >>282 ufcpp.net/study/csharp/sp3_linqreconstruct.html#iterator これ? foreach で置き換えるだけじゃたいして性能変わらない。 ここで違いが出てるのはそれの次の節の話で、 「if をループの外に出せ」と同じ原理で 「可能な限り where を from の上に」ってやるとパフォーマンス結構変わる。
292 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:16:15 ] LINQのクエリ式とSQLの一番の違いがプランナの有無。 クエリ式は書いた順番どおりに処理していくが、 SQLはプランナが最適な実行計画を立てる。
293 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 10:39:15 ] LinqtoObjectも気合い入れてプロバイダ書けばプランナ相当のもの記述可能? いや書く気毛頭無いですが
294 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 12:26:24 ] やろうとおもえばLINQでスクリプト言語書けるよ
295 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 21:52:31 ] >> 294 出だしだけでもKWSK
296 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:07:42 ] LINQ to SQLって無くなるの? なんつーか、ぶちまければ良いってもんじゃねぇだろ。 そんなのはオプソ系に任せとけよ。
297 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:08:39 ] 何で無くなると思ったのさ?
298 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:35:18 ] なくなるっつーかLinq to Entityに置き換えでしょ。 別に今のところは対して書き方が違うわけじゃないし Linq to Entity完成までの代打的存在として十分用を果たしたような。
299 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:44:48 ] うむ。かなりの部分でSQLの開発楽にしてくれた。 ストーリーにちゃんと沿わないと痛い目あうがなwww
300 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 23:18:07 ] >>296 開発が止まるだけで今後も当面は.NET Frameworkに標準搭載が続くんじゃないの?
301 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:12:05 ] Entity Frameworkは絶対こける。 間違いない。
302 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 00:44:11 ] >>301 まあVer.3ぐらいになるまでは毎回大変更の嵐だろうな。
303 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:23:24 ] Entity FrameworkはLinq to SQLの問題点が色々と解決されてるんだけど デザイナが使いにくすぎる。 RailsのActiveRecordみたいに ちょこちょこっとクラスに属性を付ければモデル完成、 ってのフレームワークだったらよかったのに。
304 名前:デフォルトの名無しさん [2008/11/20(木) 12:30:10 ] LINQ to SQLってADO.NETより目茶苦茶いいな。 更新系では、生のSQL文に完全なWHERE句を入れてくれるし、 非接続型・楽観的制御(←赤間さん流)では文句なし。 あと、生SQLのサブクエリ相当の組み合わせを段階を踏んで書けるのもいい。 デバッグも迅速になりそう。
305 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 15:06:45 ] 俺、LINQ to P2P で当てたら結婚すんだ。
306 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:51:19 ] >>304 消える運命にあるが
307 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:15:10 ] なんらかの形で残るよ。使ってみれば、この方向性で進化していくんだろうと判る。 今のはちょっとSQL Serverに特化しすぎてるからディスコンかもしれないけどさ。
308 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:16:56 ] >>307 この方向性で進化した結果がLinq to Entityなんだけど、今のところいまいちの出来。
309 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:32:43 ] >>308 Entity Framework自体まだ手を付けてないのだが、どういまいち?
310 名前:デフォルトの名無しさん [2009/01/04(日) 23:25:17 ] 例えば、 Select Sum(col1),Sum(col2),Sum(col3) from Table1 なSQLだとLINQではどう書くの?
311 名前:デフォルトの名無しさん [2009/01/04(日) 23:46:52 ] >>310 そんな質問はつい最近掲示板で見た事あるな
312 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:59:48 ] これか。ググったら一発で出てきたw ttp://bbs.wankuma.com/index.cgi?mode=all&namber=30713
313 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:53:25 ] ただのマルチじゃねーかw
314 名前:デフォルトの名無しさん [2009/01/07(水) 02:50:59 ] >>311 >>312 >>313 ケチは付けられても結局答えられる奴いねぇんだな 暇なカス野郎だけかよ
315 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 03:06:42 ] var result = from item in Table1 select new {Sum1 = item.col1.Sum(), Sum2 = item.col2.Sum(), Sum3 = item.col3.Sum(), } でいいんじゃね?
316 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 04:16:09 ] いや、良くない。範囲変数itemは単なる1レコードで、item.col?はスカラー 1回のループで計算したいなら、アキュムレータ使うしかないはず var sum = Table1.Aggregate(new[] { 0, 0, 0 }, (y, x) => { y[0] += x.col1; y[1] += x.col2; y[2] += x.col3; return y; });
317 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 05:35:25 ] >>316 それはクエリプロバイダ次第じゃなかろうか。 確かにLINQ to Objectのみなら>>316 の書き方の方が速い。 しかしTable1.Aggregateのオーバーロード解決次第によっては クエリプロバイダの提供する最適なクエリ演算子ではなく LINQ to Objectの低速なパスで実行されるため>>316 はかえって遅くなる。 式木的に Select Sum(col1),Sum(col2),Sum(col3) from Table1 というSQLに対応するのが何かと聞かれれば>>315 を推したい。 あとは>>310 が何を期待して聞いたか次第かな。 LINQ to SQLでの書き方を期待していたなら>>315 でも最適化されたと思うが。
318 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:09:53 ] LINQ to SQL、生成されたSQLクエリがどんなのか見れるから試してみればいいんでは。
319 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:21:29 ] いつもながらLinq to ほにゃららを明記しないと話がこじれるな。 Linq to Entityかもしれない。
320 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:45:44 ] マルチに答えるとつけあがるからやめとけ
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を直接変更してもいいと思う。