1 名前:デフォルトの名無しさん [2008/02/09(土) 23:51:34 ] VisualStudio2008より追加された便利で強力な機能 統合言語クエリ (LINQ : Language Integrated Query) ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。 関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。 DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する 言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。 質問、便利なマイテクニックの発表、いろいろやっちゃってください。
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 ] 皆型までみないのか。