1 名前:デフォルトの名無しさん [2008/02/09(土) 23:51:34 ] VisualStudio2008より追加された便利で強力な機能 統合言語クエリ (LINQ : Language Integrated Query) ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。 関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。 DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する 言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。 質問、便利なマイテクニックの発表、いろいろやっちゃってください。
159 名前:デフォルトの名無しさん [2008/05/24(土) 20:45:08 ] Linqで書くと速くならないなら需要ないんじゃない SQLでおなかいっぱいで
160 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:01:08 ] >>159 LINQ の価値は速度じゃなくて、 OOP パラダイムと RDB パラダイムの懸け橋になること。 SQL でおなかいっぱいって人にこそ LINQ がいいんじゃないか。
161 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:11:23 ] パラ? お母さんが子供に教えるように教えてください
162 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:23:16 ] >>161 C# の中で、オブジェクト指向言語の感覚からあまり外れることなく、 データベース問い合わせが書けるってことが大事。
163 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:22:26 ] 最初は書き方に戸惑うが、だいたいの書き方がわかってくればインテリセンス使えるのがとても大きい
164 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 04:39:07 ] コンパイラによる構文チェックが行われるというのも大きい。 条件次第で内容が大きく変わるようなクエリを構成するときに、文字列の連結を間違えて バグを作り込んでしまうような、つまらないミスを防げる。 DataContextの定義にあわせて自動でCREATE DATABASEしてくれるとか、生産性の向上に つながる要素がいろいろあるよ。 俺もほとんど把握してないけどさ。
165 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 09:04:21 ] SQLって、汎用コレクションデータ処理エンジンだね。 C/C++やらで何らかのデータ処理を行う場合、その度毎にアルゴリズムを考え、設計し、 コードを作りこまなくちゃいけないけど。 RDBだと、ちょこっとSQLを定義するだけで実際の処理はRDBのエンジンがやってくれる。 例えるなら文字列の正規表現みたいな感じで。 それが言語組み込みの文法として、RDBだとDBサーバを立て、テーブルを作り、データをインポートして からじゃないと使えないのが、RDBに限らずC#言語上の任意のコレクションデータで使えてしまう ってのは便利。
166 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 09:41:44 ] >>161 インピーダンスミスマッチでぐぐれ
167 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:12:57 ] SQLMetalってすでにあるテーブルのオブジェクト定義のXMLを生成するものだよね? 逆に今あるオブジェクトからテーブルとかを生成するツールってあったっけ?
168 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:02:32 ] >>167 方法 : データベースを動的に作成する (LINQ to SQL) msdn.microsoft.com/ja-jp/library/bb399420.aspx
169 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:39:10 ] >>161 これでも読め www.microsoft.com/japan/msdn/net/bb425822.aspx
170 名前:デフォルトの名無しさん [2008/06/02(月) 22:49:47 ] Linq人気ないから救済でAgeてやる 感謝しろビル
171 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:38:01 ] PL/SQLですね。
172 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 11:06:00 ] pc11.2ch.net/test/read.cgi/tech/1212972014/
173 名前:デフォルトの名無しさん [2008/06/15(日) 19:33:30 ] えーい Linqも人気ないけど ダメ技術のかほりがすっぞ
174 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:07:55 ] 使ったからといって、別に何かが楽になったりすっきりしたりするように見えないんだよな。
175 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 07:25:18 ] ちょっとしたDBアプリ作るの楽になるが。 XMLとかにもいいと思うよ。
176 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 21:00:53 ] メソッド形式は手軽に使えてすごく便利だよね クエリ形式は「さあLINQ使っちゃうぞー」って感じになっちゃって好きじゃない
177 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:19:07 ] 未だにクエリ式だとpとかqとかのスコープがよくわかってない俺。
178 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 03:55:30 ] fromやletが沢山必要になる場合は クエリ式を使ってる けど、それ以外ではクエリ式は全然使ってない
179 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:35:19 ] 使い方も確立されてない未知のもんだからな。 ポテンシャルは高い気がする。
180 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:55:26 ] LINQきれいにかけるけれど、特にObjectLINQだと効率的にはだめな場合もあるからなぁ。 微妙なところだ。 PLINQとかになるとまた話は違うだろうけれど。
181 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 08:43:29 ] >>180 from x in a select x; みたいなのを foreach(var x in a) yield return x; に変えるような 最適化だとせいぜい5%くらいしかスピード変わらない。 5%を気にしないといけない場面はそれほど多くないと思う。 ただ、a.Max(), a.Min(), a.Count() を同時に求めたいような場合、 自前で for まわして同時に求めた方が圧倒的に早い。 Parallel Extensions にはParallel.Forとかもついてるしなぁ。 PLINQでもやっぱり Max, Min, Count の問題は解消しない。
182 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:05:06 ] >>181 DryadLINQみたいにExpressionを直接扱う計算エンジンが要るね。 PLINQは所詮IEnumerableベースだし。 ttp://research.microsoft.com/research/sv/DryadLINQ/ ポテンシャルはDryadLINQ>>>>>PLINQなんだろうけど、 出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。 C# 3.0もお披露目から1年半ぐらいかかったし。 出荷までの時間短縮はお金じゃ解決しづらいんだろうな。
183 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:07:06 ] >出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。 不等号逆だった…… ポテンシャル: DryadLINQ>>>>>PLINQ 出荷までにかかる時間: PLINQ<<<DryadLINQ
184 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 09:10:04 ] >C# 3.0もお披露目から1年半ぐらいかかったし。 あとこれもお披露目から2年半の間違い。
185 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 10:41:48 ] もうちょっと落ち着いて!
186 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 01:03:41 ] いや、勢いあったほうがよい
187 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 22:42:17 ] 複雑なXMLファイルの読み込みはXmlTextReaderよりLINQ to Xmlを使ったほうが簡潔に書けそうですか?
188 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 22:53:07 ] 書いてみろ
189 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 23:23:38 ] >>188 一言レスって周りにも意図伝わらないからヤメレ
190 名前:デフォルトの名無しさん mailto:sage [2008/07/07(月) 23:26:55 ] 最近、勉強ついでにLINQtoSQL使ってるけどクラスとして扱えるだけで便利すぎ。 リレーション張っても参照のプロパティでアクセス出来るのも簡単すぎて涙が出る。 長ったらしいデータセットのクラス名で変数宣言してたら、varで省略できるのにも涙が出た。
191 名前:>>188 じゃないよ mailto:sage [2008/07/07(月) 23:30:39 ] >>189 自分で書けばわかるって事だろ? 意図理解できないのは君だけだと思うが。
192 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 10:10:04 ] XmlElementとXElementの違いを問うならわかるが、 XmlReaderと比べるあたり自分では何も調べずに 思いつきで書き込んだと証明してるようなものだ。
193 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:25:23 ] >>191 二つコードを書けということですね、わかります
194 名前:デフォルトの名無しさん mailto:sage [2008/07/08(火) 23:47:33 ] なんか俺のせいで荒れてるみたいだな ごめんなさい >>192 違いの話なんかしてないっすよ? あれからbuilderってサイトのサンプルを読んで勉強してみてる。 ちょっと興奮で震えてます。 皆ありがとう
195 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 03:40:44 ] 複雑なXMLファイルの定義によるかな。 Linq for XMLで使うXElement系のクラスはDTDやXMLスキーマをサポートしない。 構造の検査、実体やデフォルトの属性を展開することが必要という意味で複雑なXMLだったら手も足も出ない。 XDocument/XElementはXMLパーサーとしての機能をしぼっている。 簡単なXMLの読み書き加工は簡単にかつスマートに書ける、Linq for XMLはその為のもの。 XmlDocment/ElementはDOMとしてのすべての機能をもつ。多機能ではあるが何をするにも大掛かり。 XmlReader/Writerは StAX型の前方参照型で高速。 使用メモリが少なくてすみ全部メモリに読み込むのが問題になるような大きなXMLも対応できる。 扱いは当然ややこしい。
196 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 13:29:59 ] 意外に使いやすいよねXmlReader/Writer
197 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 20:38:17 ] マイクロソフト公式解説書としてLINQ本が出るってよ LINQテクノロジ入門 ec.nikkeibp.co.jp/item/books/A04100.html ・07/22発売 3,360円(税込み) B5変 280P
198 名前:197 mailto:sage [2008/07/27(日) 00:32:31 ] 届いたんでぼちぼち読み始め 図表を多く使っていて、C#/VBのサンプルコードも多いのは○ 内容的には結構踏み込んで丁寧に解説されていて、実際に発行されるT-SQLまで触れられてたりする。 ・C#/VB・SQLに関する基本的な理解は必須。 ・開発経験のない初心者が読むには少し難しい。 ・何となくLINQを使っているが、使いこなせていないと感じてる人 にはおすすめ。
199 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 01:55:18 ] LINQのProviderでしたっけ?クエリーとかを実装する側の作業についてまとまってるarticleとかってありますかね?(´・ω・`)
200 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 11:06:25 ] >>199 単に .Select メソッド(あるいは拡張メソッド)とか実装するだけ。 LINQ to SQL みたいなことしたければ、 LINQ の勉強というよりは、Expression Trees の勉強が必要。 で、LINQ がらみの記事は結構おおいけど、 Expression Trees はあんまり見ないなぁ。
201 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 12:23:14 ] >>200 それです、それ。 具体的にどこまでのExpressionTreeをどんな風に実装したらいいのかが・・・
202 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 12:55:38 ] Expression Trees の方は、↓に多少サンプルあり。 ufcpp.net/study/csharp/sp3_linqreconstruct.html LINQ to SQL みたいなことしたければ、IQueryable でググってみるといいんじゃないかと。
203 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 13:14:37 ] MSDNのこれも読んでおくといいかも。 ttp://msdn.microsoft.com/ja-jp/library/bb546158.aspx ttp://msdn.microsoft.com/ja-jp/library/bb882640.aspx
204 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 11:34:15 ] >>198 LINQの本が少ない中、この本はお薦め。 LINQを構成する基礎や、現在のバージョンで、できる事できない事、 やってはダメな事が書かれている。 .netとSQLを使って仕事している人ならLINQがどういう物か理解できる。 少なくともこの本レベルの事を理解していないと知らずに地雷を埋め込むことになる。
205 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 18:22:46 ] LINQは、VSに付いてくるC#のサンプルコードだけで十分理解できるでしょ。
206 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 23:44:43 ] LINQがこれから他のテクノロジとどう統合されてくのかよくわからん(´・ω・`)
207 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 00:10:28 ] > どう統合されてくのか 消えていくと言う運命もあるから、俺はもう少し様子見。
208 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 00:59:30 ] これだけ言語に食いこんだものが消えるというのはありえないと思うが。
209 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 06:48:16 ] いや、互換性のために機能としてはずっと残るかもしれないけど 新規には誰も使わなくなって結局放置と言うこと。 まあ、特攻する人も必要だから、>>208 は頑張ってくれ。
210 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 09:00:39 ] 小手先の道具として便利なLINQ to objectsくらいは残るでしょ そのほかはともかく
211 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:35:34 ] 別に「残らない」なんて断定してるわけじゃないよ。 俺はなくてもあまり困ってないし、「残らない可能性もある」ので ちょっと様子見してるだげ。 いいと思う人はどしどし使って広めてくれ。
212 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:25:27 ] LINQ便利ざんすよ? 特にLINQtoSQL。XMLはしらんがたぶん便利だろう。 今のだと出来ないこともあるけれど、出来るところのはかなり楽だ。
213 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:38:08 ] LINQ の意義の1つに、コレクションに対する操作がらみのメソッド名を統一したってのがあるから、 今後、LINQ to SQL とか LINQ to XML が廃れるようになろうとも、 コレクションとかサーバ問い合わせ系のライブラリ書く人は おそらくほぼ LINQ の規約に従ってメソッド名を付けると思う。 そういう意味では、廃れないと思うんだが。 クエリ式とか、IQueryable を介したサーバ問い合わせとかが廃れようとも、 命名規約の部分に関しては絶対残る。
214 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:43:37 ] MS の技術が「なくても困らない」と感じるのは、 MS がエンタープライズ相手の商売してるから、 個人で趣味で開発してる人へのアピール弱いせい。 あんまりホビープログラムでDBアプリとか書かないし。
215 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:10:13 ] LINQはEntity Frameworkなんかと密接に関わるからねー まだまだこれからの技術。
216 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 00:23:39 ] group by ... into g select new {value1 => g.hoge, value2 => g.fuga } みたいなLINQ書くとselect newの部分でvalue1とvalue2を生成するためにSQLサブクエリが生成されるんだけど、 これってgroup byだけで上手く書き直す方法ないんかなぁ。 というより、生成したクエリを最適化してくれる関数みたいなものはないんだろうか。
217 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:19:42 ] LINQ to SQL 自体、Entity Framework までの繋ぎの過渡技術だし、 今後 Entity Fx の側がよっぽど大ごけしないと LINQ to SQL のグレードアップは見込めない気もする。 LINQ とは別に、SQL 文の最適化ライブラリみたいなの探す方が早いかも。
218 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:25:31 ] EntityFWのクエリーインターフェースとして、LINQ使われるんじゃないの?(´・ω・`) 今のLINQのEntityうんたらがもっとしっかりしたものになるということ?
219 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:44:14 ] 裏側の最適化の話ね。 同じ LINQ クエリ式を書いたときに、 実際にどういう SQL 文が発行されるかという、 実装上の最適化の部分に関して、 LINQ to SQL の今後にはあんまり期待しない方がいいんじゃないかってこと。 まだ手をつけてる人が少なくて情報少ないけども、 将来を期待したいなら LINQ to Entity Framework の方使うこと考えるのがいいんじゃないかと。
220 名前:デフォルトの名無しさん mailto:sage [2008/09/03(水) 08:46:06 ] LINQtoSQLがせいじゅくされてLINQtoEntityになるのかとおもっとった
221 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 20:45:39 ] りんきゅー><
222 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:13:37 ] ↓をメソッド形式で書きたいのですが、OrderByメソッドで複数のプロパティで ソートするのははどうすればいいですか? var v = from e in GetFoo() orderby e.Age, e.Name select e OrderBy二回せずに一回でさくっと書きたいです。
223 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 22:32:24 ] >>222 OrderBy(1つ目の条件).ThenBy(2つ目の条件) OrderBy 1回というのは無理。
224 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:14:01 ] >>223 ThenByって知らなかった。ありがと。
225 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 01:50:55 ] つか、そんなの条件式を二つ持つOrderByを自分で実装するがよろし
226 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 03:17:06 ] 引数可変にしてOrderBy〜ThenByに丸投げで、1分とかからずに実装できるな
227 名前:デフォルトの名無しさん [2008/09/19(金) 07:24:56 ] こうして車輪は四角に変容しバグを抱擁した後に再輸出されるのであった...
228 名前:デフォルトの名無しさん [2008/09/28(日) 23:54:29 ] LINQの遅延実行と即時実行は正直いらない気がする。 Aggreegate戻り値はIntegerだし、クエリ機能あれば十分なのでは。 LINQ TO XMLとか開発の現場でまず使うのは小数だろうし、可用性が低いよ。 VBチームの自己満足だね。いつものことだけど。
229 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 12:49:16 ] >>228 VBのAggregate構文のことかEnumerable.Aggregateのことを言ってるのかわからない。 Integerってどういう意味だろう、集計対象の型で集計されると思うけど。 VBのLinqは使いやすくしようと、文法やキーワードを増やしすぎて 収集がつかなくなってるという感じはする。C#と同じにしておけば良かったような。
230 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:30:31 ] VBはラムダ式が冗長だから拡張メソッドでクエリ書くと悲惨なことになる
231 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 14:54:49 ] 遅延実行と即時評価ってやたら強調されてるけど やっぱりC#のyield知らないとわかりにくいのかな
232 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:02:22 ] 言われてみるとyieldを知らない(あまり使った事がない)とすれば 即時実行でないのに違和感を感じるのも分かるな。
233 名前:デフォルトの名無しさん [2008/09/30(火) 11:58:27 ] いまさらだけど、yield Returnつう名前がややこすいよ!!
234 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:43:43 ] yield とかってどこからきたん?関数型?
235 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 23:47:50 ] Rubyのはクロージャ呼び出しだからPythonかなぁ。 Windows2x時代のAPIは関係ないと思う。
236 名前:デフォルトの名無しさん [2008/10/01(水) 02:17:48 ] ICONからきていると予想 Fiberはいつのまにか消えていたってオチかな
237 名前:[Fn]+[名無しさん] [2008/10/02(木) 00:00:54 ] てかDTDとかXMLスキーマサポートしてない段階でLINQ廃レは確定ぽ。。
238 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 00:06:53 ] それは LINQ to XML の問題であって、LINQ の問題じゃないのでは。
239 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:54:39 ] LINQ to XMLはもともとXmlDOMやXmlReaderの代替を狙ったものじゃなく、 standaloneのXMLや部分的なXMLを簡単に扱えることを目指したもの。 はじめからDTDやXMLSchemaはサポートしないことになっていた。 もっともnamespaceを中途半端なサポートはチトいただけないから改良は欲しい。 いっそなくすか、もっと充実させるかどちらかで。
240 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 08:21:03 ] スキーマはサポートしない、って確かにそうなんだけど ぶっちゃけあれ下層に XmlReader が使えるからでは ないのかと
241 名前:デフォルトの名無しさん [2008/10/02(木) 13:10:43 ] LINQはすんばらしい FOR EACH書かなくてすむし、べた書きのXMLもコードとして扱える。
242 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:46:47 ] C#だとエディットコンティニューが使えないのは結構痛い
243 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:10:47 ] エディットコンティニュかあ、x64だと使えないんだよなあ。 まあx86にすりゃいいんだけど、デフォがAnyCPUだからなあ。
244 名前:デフォルトの名無しさん [2008/10/11(土) 23:59:11 ] てかLINQってORACLEとかポスグレでも使えるのね。
245 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 00:58:14 ] >>244 LINQ to Entity の出た今となってはね。 MS SQL Server でしか使えないって言われてたのは、 SP1 入る前、LINQ to SQL の時代の話。
246 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 02:57:11 ] 別に Linq to SQL でも別データベースサポート可能だよ。 でも Linq -> Entity SQL がサポートされたから、Entity SQL -> ネイティブ SQL だけでいいじゃん=皆やる気ナスなだけで。
247 名前:デフォルトの名無しさん [2008/10/12(日) 20:47:40 ] Linq to Entityが生成する生のSQLを確認する方法を教えてください。
248 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 00:46:17 ] それは実行される前に?恒常的に? そうじゃないならログ見りゃいいと思うけど・・・
249 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:15:00 ] >>248 実行時でかまいません。 Linq to SQLのようのDataContext.Logプロパティにあたるものが見当たらないようです。 またSystem.DiagnosticsのTraceやDebugでも確認できませんでした。 探し方が悪いのかもしれませんがSQLのログを出力する方法を教えてください。
250 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 21:39:14 ] だから SQL Server なら確かプロファイラ起動してトレースの開始で… と記憶を頼りにぐぐって気づいたんだが Express にはないのか このツール。おおう。それとごめんトレースだった 2005 ならこんなの見つけたけど ttp://code.google.com/p/sqlexpressprofiler/
251 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 03:19:46 ] タイプセーフなデータベースプログラミング ttp://d.hatena.ne.jp/higayasuo/20081014/1223969275 拡張メソッドとラムダ式と式木と匿名型とvarとあって良かったと思える瞬間。
252 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 17:46:42 ] Entity FrameworkをLinqなしで使うと2番目の例っぽくなるね。
253 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 19:35:37 ] 多言語でLinqのパクリを作ろうと思っても、言語仕様のサポートが無いと ああいう風にせざるをえないんだよな。
254 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:35:24 ] まあ、だからC# 3.0がああなったわけで。
255 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 22:53:01 ] その辺Booなら自分で言語使用作れるかと
256 名前:デフォルトの名無しさん mailto:sage [2008/10/18(土) 10:13:17 ] 実際に動くものを作ってから言え
257 名前:デフォルトの名無しさん [2008/10/27(月) 22:19:23 ] 時間ができたので久しぶりの >>1 です、だんだん慣れてきた、半年続けた結果分かったことLINQスゲー使えます という訳でみんなこれ勉強しろ!! とりあえずアドバイス、まずは yield return / yield break が自在に使いこなせるようになるといいです。 使い方のコツ 1.シーケンス( IEnumerable<T> 、データベースで言えばテーブル)の生成 2.from ... または System.Linq.Enumerable で加工(繰り返し) 3.ToArray() , ToList() , ToDictionary() , All() , Any() 等で結果生成。 これが標準パターン 元の列を作る → 加工 → 加工 ・・・ → 加工 → 配列化 基本的にこればっかりです。 ちなみに LINQ が真の力を発揮するのはデータベースではなく、日常的に使う配列やオブジェクトです。 いままではデータベースではクエリで簡単に実行できても、プログラム中ではできずと やむなくデータベースに一旦突っ込んでやるか、フルスクラッチで同等機能を作り出すかと、 無意味なプログラム実行環境の大規模化を引き起こしていました、これが無くなります。
258 名前:1 [2008/10/27(月) 22:20:21 ] とにかく『加工元が簡単に作れない』事には、LINQ は使い物になりません。 という訳でシーケンスの作り方のコツ 配列やList等は、IEnumerable<T> 持ちなのでそのまんまシーケンスその物である、これは当たり前。 *.バラバラな物をシーケンスにするコツ、『適当』に yield return をばらまく このあまりに馬鹿らしく単純な使い方になかなか気付けなかったw 例 class Test { int A; string B; // メンバーを片っ端からシーケンスにする IEnumerable<object> Members() { yield return A; yield return B; } public override bool Equals(object obj) { Test obj2 = obj as Test; if(obj2==null) return false; return this.Members().SequenceEqual(obj2.Members()); } public override int GetHashCode() { return this.Members().Aggregate(0, (acc, element) => acc ^ element.GetHashCode()); } } *.IEnumerable<T> を持っていないライブラリの古い糞クラス用にアダプターやヘルパー関数をたっぷり作っておくこと!! 例 IEnumerable<T> CreateEnumerable<T>(Func<int> getCount, Func<int, T> getItem) { for (int i = 0; i < getCount(); ++i) yield return getItem(i); } 標準で .Net Framework に準備して欲しい・・・
259 名前:1 [2008/10/27(月) 22:21:21 ] 二以上のシーケンスを同時に加工するときのコツ 1.ToArray() , ToList() 等で、一旦配列にする。 2.Enumerable.Range( 0 , seq.Count() ) で配列の添え字を列挙して使う(なかなか気付けなかったw) 例 var tmp1 = 元シーケンス1.ToList(); var tmp2 = 元シーケンス2.ToList(); var tmp3 = from index in Enumerable.Range(0,tmp1.Count-1) select new { tmp1[index] , tmp2[index] }; 3.ToDictionary や ToLookup を使って連想配列を経由するとさらに色々な事が簡単に 4.他にも色々便利なコンテナもあるので To○○ を拡張を沢山作っておくのがコツ 標準で .Net Framework に準備して欲しい・・・
260 名前:1 [2008/10/27(月) 22:22:05 ] ありそうで実は無くて意外不便なもの 1.Excelを使うと良く登場するパータンで、前後の要素にアクセスしながら新しい列を作るような手段が実はない [ ][0] [3][=A2] [4][=B2+A3] [6][=B3+A4] [2][=B4+A5] [5][=B5+A6] 左の列を元に、右の列のようなシーケンスを作る関数を作っておくと便利、汎用関数も簡単につくれる。 これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・ 2.ツリー構造の全要素列挙、汎用関数も簡単につくれる。 これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・ 3.コントロールブレイク(コボラーの必殺技)も作っておくと便利。 COBOLは実は触ったことが一度もないのですが、どうも色々便利ノウハウが彼らにはあるようです。 現在鋭意開拓中
261 名前:デフォルトの名無しさん [2008/10/27(月) 22:22:31 ] Enumerableにある関数は、全部使い込みましょう、特に重要なのは シーケンスを混ぜて一つのシーケンスを作る系 Enumerable.Concat() Enumerable.Intersect() Enumerable.Union() Enumerable.Except() シーケンスの先頭や部分を取得する系 Enumerable.First() Enumerable.FirstOrDefault() Enumerable.Take() Enumerable.Skip() 全シーケンスのチェック、これ以上複雑な物は foreach の方がかえって分かりやすい気がする。 Enumerable.All() Enumerable.Any() Enumerable.SequenceEqual() 要素の型変換、指定型のみ抽出 Enumerable.Cast() Enumerable.OfType() マニュアルが余りに理解不能な文書なので、動作を確かめながら自分の言葉で整理しておくと便利です。 生成用関数、加工用関数、結果生成用関数の三つに分類してみると、すっきりしてきます。
262 名前:デフォルトの名無しさん [2008/10/27(月) 23:24:32 ] サンプル通りにやってもAddの定義が無いのですが‥‥ www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46703&forum=7&2 ぶっちゃけ、この常連しんさんと全く同じ質問なのですが、 この人、質問して、自己解決して、回答書いてないので‥‥
263 名前:デフォルトの名無しさん [2008/10/27(月) 23:38:24 ] 関数型プログラム言語触れば別に驚くことでもない
264 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 01:43:36 ] Firstも使うけどSingleもよく使う
265 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 03:14:06 ] >>261 最も基本の Select, SelectMany が抜けてる >>262 多分、LINQ to SQLだよな Add がどこから出てきたのか知らんが、対象がTable<T>なら データ操作にはInsert〜とかDelete〜あたりをつかう
266 名前:262 mailto:sage [2008/10/28(火) 13:58:59 ] >>265 どうもありがとうございます。>>262 のサイトからさらっと試し始めたので‥‥ InsertOnSubmitを使うんだと分りました。 たぶん、あのサイトは記述が古いんですね。 とっても面白いので、本でも買って真面目に勉強します‥‥
267 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:52:37 ] >>265 基本といえば Where もないね クエリ式で書けるものは入れてないのかな?
268 名前:デフォルトの名無しさん [2008/10/31(金) 16:20:09 ] これってORマッピングツールみたいなものか?
269 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 19:53:08 ] >>267 ラムダで書くと見た目が不必要に複雑になるからな
270 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 19:59:39 ] C#の方は XML to LINQ を無理やりC#構文で書かせるのはなんとかしてほしい。 データ操作まで無理やりオブジェクト指向にするとかえって記述がグダグダになるんだよ。 データ操作は特化した記述がいい。
271 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:27:08 ] 同じ記述でXMLが扱える所が利点なのに? わざわざ特化した記述作って、新しく覚えないといけなかったら魅力感じないな
272 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 20:35:02 ] もしかして関数型構築のこと?
273 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 22:23:22 ] >>269 全部クエリ式で書けない場合は,joinとかletとか使わない限りは全部拡張メソッドで俺は書いちゃうな
274 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 02:17:30 ] クエリ式みたいなものを自由に拡張できるようにして欲しいお(´・ω・`)
275 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 02:29:34 ] そんなことしたらカオスになるじゃないか
276 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 09:41:51 ] クエリ式は抽象化の度合いを下げないまま、 foreachをネストさせた時の様に変数を扱えるのが便利だね。 これを拡張可能にすると・・・関数型っぽくなる気がする。
277 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 09:50:56 ] >>275 しかしそれがいい・ >>276 調子に乗ってクエリ式つなげてくと遅くなるらしいからなぁ・・・ 記述方法は大好きなんだが。
278 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 10:45:55 ] >>277 遅くなるってのは意外と平気。 かなりバカに書かない限りはforeach書くのと比べて1割くらいしかパフォーマンス落ちない。
279 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 11:38:48 ] 遅延評価を繋げるだけならほとんど遅くはならないはず
280 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 11:49:52 ] 遅い速いは相対的なものだからどのレベルで遅いといってるのか示さないと議論にならない。 非常に細かいパフォーマンスを気にしているなら、 ラムダ式(デリゲート)を使うので関数の呼び出しがインライン化されないとか、 SumやMaxなど集計系メソッドを複数使った場合にちょっと効率の悪いことをしているとか そんなところだね。
281 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:18:38 ] Reverseってバッファ使うから即時実行だと思ってたんだけど、Reverseの呼び出し時じゃなくて 最初のMoveNextの呼び出しの時点ですべての結果が決まるから遅延実行になるのか 速い遅い気にするならどういう実装になってるか気にしないといけないね
282 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:31:55 ] 3.0出始めの時に誰かが、foreachで条件とか変換とか並べて書いたのと、クエリ式とか並べて頴田の比べて結構違いがあったような。
283 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:37:47 ] Linq to ObjectとLinq to SQLは分けないと話が食い違うから要注意。
284 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:44:36 ] この文脈でどう読んだらto SQLになるのか
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を直接変更してもいいと思う。
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のメンバ関数を勉強してみます