【VB.NET】LINQ友の会 ..
[2ch|▼Menu]
154:デフォルトの名無しさん
08/04/13 02:36:53
>>152
それ、LINQ だとサブクエリ要らない。

var q =
 from a in tbl1
 join b in tbl2 on a.Key equals b.Key
 select new { a.Key, a.Col1, b.Col2 };

サブクエリは普通に ↓ みたいに書ける。
from a in
 from b in list
 select b.SomeProperty
select a.SomeProperty

155:デフォルトの名無しさん
08/04/13 14:50:18
そんなことしなくても
保守が容易な綺麗なコードを書けるから
(゚听)イラネ

156:デフォルトの名無しさん
08/04/13 16:44:19
最近LINQ初めて>>22見たんだけど、
コードが見通しよく整理されていく中盤からの展開は見てて痛快だなぁ

157:デフォルトの名無しさん
08/04/24 21:22:23
URLリンク(code.msdn.microsoft.com)


158:デフォルトの名無しさん
08/04/24 21:41:48
>>157
Visual LINQ Query Builder

VS2008用のアドインか

159:デフォルトの名無しさん
08/05/24 20:45:08
Linqで書くと速くならないなら需要ないんじゃない
SQLでおなかいっぱいで

160:デフォルトの名無しさん
08/05/24 21:01:08
>>159
LINQ の価値は速度じゃなくて、
OOP パラダイムと RDB パラダイムの懸け橋になること。
SQL でおなかいっぱいって人にこそ LINQ がいいんじゃないか。

161:デフォルトの名無しさん
08/05/24 23:11:23
パラ?
お母さんが子供に教えるように教えてください

162:デフォルトの名無しさん
08/05/24 23:23:16
>>161
C# の中で、オブジェクト指向言語の感覚からあまり外れることなく、
データベース問い合わせが書けるってことが大事。

163:デフォルトの名無しさん
08/05/25 00:22:26
最初は書き方に戸惑うが、だいたいの書き方がわかってくればインテリセンス使えるのがとても大きい

164:デフォルトの名無しさん
08/05/25 04:39:07
コンパイラによる構文チェックが行われるというのも大きい。
条件次第で内容が大きく変わるようなクエリを構成するときに、文字列の連結を間違えて
バグを作り込んでしまうような、つまらないミスを防げる。
DataContextの定義にあわせて自動でCREATE DATABASEしてくれるとか、生産性の向上に
つながる要素がいろいろあるよ。
俺もほとんど把握してないけどさ。

165:デフォルトの名無しさん
08/05/25 09:04:21
SQLって、汎用コレクションデータ処理エンジンだね。
C/C++やらで何らかのデータ処理を行う場合、その度毎にアルゴリズムを考え、設計し、
コードを作りこまなくちゃいけないけど。
RDBだと、ちょこっとSQLを定義するだけで実際の処理はRDBのエンジンがやってくれる。
例えるなら文字列の正規表現みたいな感じで。

それが言語組み込みの文法として、RDBだとDBサーバを立て、テーブルを作り、データをインポートして
からじゃないと使えないのが、RDBに限らずC#言語上の任意のコレクションデータで使えてしまう
ってのは便利。

166:デフォルトの名無しさん
08/05/25 09:41:44
>>161
インピーダンスミスマッチでぐぐれ

167:デフォルトの名無しさん
08/05/25 11:12:57
SQLMetalってすでにあるテーブルのオブジェクト定義のXMLを生成するものだよね?
逆に今あるオブジェクトからテーブルとかを生成するツールってあったっけ?

168:デフォルトの名無しさん
08/05/25 14:02:32
>>167
方法 : データベースを動的に作成する (LINQ to SQL)
URLリンク(msdn.microsoft.com)

169:デフォルトの名無しさん
08/05/25 14:39:10
>>161
これでも読め
URLリンク(www.microsoft.com)

170:デフォルトの名無しさん
08/06/02 22:49:47
Linq人気ないから救済でAgeてやる
感謝しろビル

171:デフォルトの名無しさん
08/06/04 08:38:01
PL/SQLですね。

172:デフォルトの名無しさん
08/06/09 11:06:00
スレリンク(tech板)

173:デフォルトの名無しさん
08/06/15 19:33:30
えーい
Linqも人気ないけど
ダメ技術のかほりがすっぞ

174:デフォルトの名無しさん
08/06/17 02:07:55
使ったからといって、別に何かが楽になったりすっきりしたりするように見えないんだよな。

175:デフォルトの名無しさん
08/06/17 07:25:18
ちょっとしたDBアプリ作るの楽になるが。
XMLとかにもいいと思うよ。

176:デフォルトの名無しさん
08/06/17 21:00:53
メソッド形式は手軽に使えてすごく便利だよね
クエリ形式は「さあLINQ使っちゃうぞー」って感じになっちゃって好きじゃない

177:デフォルトの名無しさん
08/06/17 22:19:07
未だにクエリ式だとpとかqとかのスコープがよくわかってない俺。

178:デフォルトの名無しさん
08/06/18 03:55:30
fromやletが沢山必要になる場合は
クエリ式を使ってる

けど、それ以外ではクエリ式は全然使ってない

179:デフォルトの名無しさん
08/06/19 22:35:19
使い方も確立されてない未知のもんだからな。
ポテンシャルは高い気がする。

180:デフォルトの名無しさん
08/06/20 00:55:26
LINQきれいにかけるけれど、特にObjectLINQだと効率的にはだめな場合もあるからなぁ。
微妙なところだ。
PLINQとかになるとまた話は違うだろうけれど。

181:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/06/20 09:05:06
>>181
DryadLINQみたいにExpressionを直接扱う計算エンジンが要るね。
PLINQは所詮IEnumerableベースだし。
URLリンク(research.microsoft.com)

ポテンシャルはDryadLINQ>>>>>PLINQなんだろうけど、
出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。

C# 3.0もお披露目から1年半ぐらいかかったし。
出荷までの時間短縮はお金じゃ解決しづらいんだろうな。

183:デフォルトの名無しさん
08/06/20 09:07:06
>出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。

不等号逆だった……
ポテンシャル: DryadLINQ>>>>>PLINQ
出荷までにかかる時間: PLINQ<<<DryadLINQ

184:デフォルトの名無しさん
08/06/20 09:10:04
>C# 3.0もお披露目から1年半ぐらいかかったし。

あとこれもお披露目から2年半の間違い。

185:デフォルトの名無しさん
08/06/21 10:41:48
もうちょっと落ち着いて!

186:デフォルトの名無しさん
08/06/26 01:03:41
いや、勢いあったほうがよい

187:デフォルトの名無しさん
08/07/07 22:42:17
複雑なXMLファイルの読み込みはXmlTextReaderよりLINQ to Xmlを使ったほうが簡潔に書けそうですか?

188:デフォルトの名無しさん
08/07/07 22:53:07
書いてみろ

189:デフォルトの名無しさん
08/07/07 23:23:38
>>188
一言レスって周りにも意図伝わらないからヤメレ

190:デフォルトの名無しさん
08/07/07 23:26:55
最近、勉強ついでにLINQtoSQL使ってるけどクラスとして扱えるだけで便利すぎ。
リレーション張っても参照のプロパティでアクセス出来るのも簡単すぎて涙が出る。
長ったらしいデータセットのクラス名で変数宣言してたら、varで省略できるのにも涙が出た。

191:>>188 じゃないよ
08/07/07 23:30:39
>>189
自分で書けばわかるって事だろ?

意図理解できないのは君だけだと思うが。

192:デフォルトの名無しさん
08/07/08 10:10:04
XmlElementとXElementの違いを問うならわかるが、
XmlReaderと比べるあたり自分では何も調べずに
思いつきで書き込んだと証明してるようなものだ。

193:デフォルトの名無しさん
08/07/08 23:25:23
>>191
二つコードを書けということですね、わかります



194:デフォルトの名無しさん
08/07/08 23:47:33
なんか俺のせいで荒れてるみたいだな
ごめんなさい

>>192
違いの話なんかしてないっすよ?




あれからbuilderってサイトのサンプルを読んで勉強してみてる。
ちょっと興奮で震えてます。
皆ありがとう


195:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/11 13:29:59
意外に使いやすいよねXmlReader/Writer

197:デフォルトの名無しさん
08/07/19 20:38:17
マイクロソフト公式解説書としてLINQ本が出るってよ

LINQテクノロジ入門
URLリンク(ec.nikkeibp.co.jp)
・07/22発売 3,360円(税込み) B5変 280P

198:197
08/07/27 00:32:31
届いたんでぼちぼち読み始め

図表を多く使っていて、C#/VBのサンプルコードも多いのは○
内容的には結構踏み込んで丁寧に解説されていて、実際に発行されるT-SQLまで触れられてたりする。

・C#/VB・SQLに関する基本的な理解は必須。
・開発経験のない初心者が読むには少し難しい。
・何となくLINQを使っているが、使いこなせていないと感じてる人 にはおすすめ。

199:デフォルトの名無しさん
08/07/27 01:55:18
LINQのProviderでしたっけ?クエリーとかを実装する側の作業についてまとまってるarticleとかってありますかね?(´・ω・`)

200:デフォルトの名無しさん
08/07/27 11:06:25
>>199
単に .Select メソッド(あるいは拡張メソッド)とか実装するだけ。
LINQ to SQL みたいなことしたければ、
LINQ の勉強というよりは、Expression Trees の勉強が必要。

で、LINQ がらみの記事は結構おおいけど、
Expression Trees はあんまり見ないなぁ。

201:デフォルトの名無しさん
08/07/27 12:23:14
>>200
それです、それ。
具体的にどこまでのExpressionTreeをどんな風に実装したらいいのかが・・・



202:デフォルトの名無しさん
08/07/27 12:55:38
Expression Trees の方は、↓に多少サンプルあり。
URLリンク(ufcpp.net)

LINQ to SQL みたいなことしたければ、IQueryable でググってみるといいんじゃないかと。

203:デフォルトの名無しさん
08/07/27 13:14:37
MSDNのこれも読んでおくといいかも。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

204:デフォルトの名無しさん
08/08/31 11:34:15
>>198
LINQの本が少ない中、この本はお薦め。
LINQを構成する基礎や、現在のバージョンで、できる事できない事、
やってはダメな事が書かれている。
.netとSQLを使って仕事している人ならLINQがどういう物か理解できる。
少なくともこの本レベルの事を理解していないと知らずに地雷を埋め込むことになる。

205:デフォルトの名無しさん
08/08/31 18:22:46
LINQは、VSに付いてくるC#のサンプルコードだけで十分理解できるでしょ。

206:デフォルトの名無しさん
08/08/31 23:44:43
LINQがこれから他のテクノロジとどう統合されてくのかよくわからん(´・ω・`)

207:デフォルトの名無しさん
08/09/01 00:10:28
> どう統合されてくのか

消えていくと言う運命もあるから、俺はもう少し様子見。

208:デフォルトの名無しさん
08/09/01 00:59:30
これだけ言語に食いこんだものが消えるというのはありえないと思うが。

209:デフォルトの名無しさん
08/09/01 06:48:16
いや、互換性のために機能としてはずっと残るかもしれないけど
新規には誰も使わなくなって結局放置と言うこと。

まあ、特攻する人も必要だから、>>208 は頑張ってくれ。

210:デフォルトの名無しさん
08/09/01 09:00:39
小手先の道具として便利なLINQ to objectsくらいは残るでしょ
そのほかはともかく

211:デフォルトの名無しさん
08/09/01 21:35:34
別に「残らない」なんて断定してるわけじゃないよ。
俺はなくてもあまり困ってないし、「残らない可能性もある」ので
ちょっと様子見してるだげ。

いいと思う人はどしどし使って広めてくれ。

212:デフォルトの名無しさん
08/09/01 23:25:27
LINQ便利ざんすよ?
特にLINQtoSQL。XMLはしらんがたぶん便利だろう。
今のだと出来ないこともあるけれど、出来るところのはかなり楽だ。

213:デフォルトの名無しさん
08/09/01 23:38:08
LINQ の意義の1つに、コレクションに対する操作がらみのメソッド名を統一したってのがあるから、
今後、LINQ to SQL とか LINQ to XML が廃れるようになろうとも、
コレクションとかサーバ問い合わせ系のライブラリ書く人は
おそらくほぼ LINQ の規約に従ってメソッド名を付けると思う。

そういう意味では、廃れないと思うんだが。
クエリ式とか、IQueryable を介したサーバ問い合わせとかが廃れようとも、
命名規約の部分に関しては絶対残る。

214:デフォルトの名無しさん
08/09/01 23:43:37
MS の技術が「なくても困らない」と感じるのは、
MS がエンタープライズ相手の商売してるから、
個人で趣味で開発してる人へのアピール弱いせい。
あんまりホビープログラムでDBアプリとか書かないし。

215:デフォルトの名無しさん
08/09/02 00:10:13
LINQはEntity Frameworkなんかと密接に関わるからねー
まだまだこれからの技術。

216:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/09/03 08:19:42
LINQ to SQL 自体、Entity Framework までの繋ぎの過渡技術だし、
今後 Entity Fx の側がよっぽど大ごけしないと
LINQ to SQL のグレードアップは見込めない気もする。

LINQ とは別に、SQL 文の最適化ライブラリみたいなの探す方が早いかも。

218:デフォルトの名無しさん
08/09/03 08:25:31
EntityFWのクエリーインターフェースとして、LINQ使われるんじゃないの?(´・ω・`)
今のLINQのEntityうんたらがもっとしっかりしたものになるということ?

219:デフォルトの名無しさん
08/09/03 08:44:14
裏側の最適化の話ね。

同じ LINQ クエリ式を書いたときに、
実際にどういう SQL 文が発行されるかという、
実装上の最適化の部分に関して、
LINQ to SQL の今後にはあんまり期待しない方がいいんじゃないかってこと。

まだ手をつけてる人が少なくて情報少ないけども、
将来を期待したいなら LINQ to Entity Framework の方使うこと考えるのがいいんじゃないかと。

220:デフォルトの名無しさん
08/09/03 08:46:06
LINQtoSQLがせいじゅくされてLINQtoEntityになるのかとおもっとった

221:デフォルトの名無しさん
08/09/11 20:45:39
りんきゅー><

222:デフォルトの名無しさん
08/09/17 20:13:37
↓をメソッド形式で書きたいのですが、OrderByメソッドで複数のプロパティで
ソートするのははどうすればいいですか?

var v = from e in GetFoo() orderby e.Age, e.Name select e

OrderBy二回せずに一回でさくっと書きたいです。

223:デフォルトの名無しさん
08/09/17 22:32:24
>>222
OrderBy(1つ目の条件).ThenBy(2つ目の条件)

OrderBy 1回というのは無理。

224:デフォルトの名無しさん
08/09/18 20:14:01
>>223
ThenByって知らなかった。ありがと。

225:デフォルトの名無しさん
08/09/19 01:50:55
つか、そんなの条件式を二つ持つOrderByを自分で実装するがよろし


226:デフォルトの名無しさん
08/09/19 03:17:06
引数可変にしてOrderBy〜ThenByに丸投げで、1分とかからずに実装できるな

227:デフォルトの名無しさん
08/09/19 07:24:56
こうして車輪は四角に変容しバグを抱擁した後に再輸出されるのであった...

228:デフォルトの名無しさん
08/09/28 23:54:29
LINQの遅延実行と即時実行は正直いらない気がする。
Aggreegate戻り値はIntegerだし、クエリ機能あれば十分なのでは。

LINQ TO XMLとか開発の現場でまず使うのは小数だろうし、可用性が低いよ。
VBチームの自己満足だね。いつものことだけど。

229:デフォルトの名無しさん
08/09/29 12:49:16
>>228
VBのAggregate構文のことかEnumerable.Aggregateのことを言ってるのかわからない。
Integerってどういう意味だろう、集計対象の型で集計されると思うけど。

VBのLinqは使いやすくしようと、文法やキーワードを増やしすぎて
収集がつかなくなってるという感じはする。C#と同じにしておけば良かったような。


230:デフォルトの名無しさん
08/09/29 14:30:31
VBはラムダ式が冗長だから拡張メソッドでクエリ書くと悲惨なことになる

231:デフォルトの名無しさん
08/09/29 14:54:49
遅延実行と即時評価ってやたら強調されてるけど
やっぱりC#のyield知らないとわかりにくいのかな

232:デフォルトの名無しさん
08/09/29 23:02:22
言われてみるとyieldを知らない(あまり使った事がない)とすれば
即時実行でないのに違和感を感じるのも分かるな。

233:デフォルトの名無しさん
08/09/30 11:58:27
いまさらだけど、yield Returnつう名前がややこすいよ!!

234:デフォルトの名無しさん
08/09/30 23:43:43
yield とかってどこからきたん?関数型?

235:デフォルトの名無しさん
08/09/30 23:47:50
Rubyのはクロージャ呼び出しだからPythonかなぁ。
Windows2x時代のAPIは関係ないと思う。


236:デフォルトの名無しさん
08/10/01 02:17:48
ICONからきていると予想
Fiberはいつのまにか消えていたってオチかな

237:[Fn]+[名無しさん]
08/10/02 00:00:54
てかDTDとかXMLスキーマサポートしてない段階でLINQ廃レは確定ぽ。。

238:デフォルトの名無しさん
08/10/02 00:06:53
それは LINQ to XML の問題であって、LINQ の問題じゃないのでは。

239:デフォルトの名無しさん
08/10/02 01:54:39
LINQ to XMLはもともとXmlDOMやXmlReaderの代替を狙ったものじゃなく、
standaloneのXMLや部分的なXMLを簡単に扱えることを目指したもの。
はじめからDTDやXMLSchemaはサポートしないことになっていた。
もっともnamespaceを中途半端なサポートはチトいただけないから改良は欲しい。
いっそなくすか、もっと充実させるかどちらかで。

240:デフォルトの名無しさん
08/10/02 08:21:03
スキーマはサポートしない、って確かにそうなんだけど
ぶっちゃけあれ下層に XmlReader が使えるからでは
ないのかと

241:デフォルトの名無しさん
08/10/02 13:10:43
LINQはすんばらしい
FOR EACH書かなくてすむし、べた書きのXMLもコードとして扱える。


242:デフォルトの名無しさん
08/10/03 00:46:47
C#だとエディットコンティニューが使えないのは結構痛い

243:デフォルトの名無しさん
08/10/03 10:10:47
エディットコンティニュかあ、x64だと使えないんだよなあ。
まあx86にすりゃいいんだけど、デフォがAnyCPUだからなあ。

244:デフォルトの名無しさん
08/10/11 23:59:11
てかLINQってORACLEとかポスグレでも使えるのね。

245:デフォルトの名無しさん
08/10/12 00:58:14
>>244
LINQ to Entity の出た今となってはね。
MS SQL Server でしか使えないって言われてたのは、
SP1 入る前、LINQ to SQL の時代の話。


246:デフォルトの名無しさん
08/10/12 02:57:11
別に Linq to SQL でも別データベースサポート可能だよ。
でも Linq -> Entity SQL がサポートされたから、Entity SQL ->
ネイティブ SQL だけでいいじゃん=皆やる気ナスなだけで。


247:デフォルトの名無しさん
08/10/12 20:47:40
Linq to Entityが生成する生のSQLを確認する方法を教えてください。

248:デフォルトの名無しさん
08/10/13 00:46:17
それは実行される前に?恒常的に?
そうじゃないならログ見りゃいいと思うけど・・・

249:デフォルトの名無しさん
08/10/13 17:15:00
>>248
実行時でかまいません。
Linq to SQLのようのDataContext.Logプロパティにあたるものが見当たらないようです。
またSystem.DiagnosticsのTraceやDebugでも確認できませんでした。
探し方が悪いのかもしれませんがSQLのログを出力する方法を教えてください。

250:デフォルトの名無しさん
08/10/13 21:39:14
だから SQL Server なら確かプロファイラ起動してトレースの開始で…
と記憶を頼りにぐぐって気づいたんだが Express にはないのか
このツール。おおう。それとごめんトレースだった

2005 ならこんなの見つけたけど
URLリンク(code.google.com)


251:デフォルトの名無しさん
08/10/17 03:19:46
タイプセーフなデータベースプログラミング
URLリンク(d.hatena.ne.jp)

拡張メソッドとラムダ式と式木と匿名型とvarとあって良かったと思える瞬間。

252:デフォルトの名無しさん
08/10/17 17:46:42
Entity FrameworkをLinqなしで使うと2番目の例っぽくなるね。

253:デフォルトの名無しさん
08/10/17 19:35:37
多言語でLinqのパクリを作ろうと思っても、言語仕様のサポートが無いと
ああいう風にせざるをえないんだよな。

254:デフォルトの名無しさん
08/10/17 22:35:24
まあ、だからC# 3.0がああなったわけで。

255:デフォルトの名無しさん
08/10/17 22:53:01
その辺Booなら自分で言語使用作れるかと

256:デフォルトの名無しさん
08/10/18 10:13:17
実際に動くものを作ってから言え

257:デフォルトの名無しさん
08/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
08/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
08/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
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/27 23:24:32
サンプル通りにやってもAddの定義が無いのですが‥‥
URLリンク(www.atmarkit.co.jp)
ぶっちゃけ、この常連しんさんと全く同じ質問なのですが、
この人、質問して、自己解決して、回答書いてないので‥‥

263:デフォルトの名無しさん
08/10/27 23:38:24
関数型プログラム言語触れば別に驚くことでもない

264:デフォルトの名無しさん
08/10/28 01:43:36
Firstも使うけどSingleもよく使う

265:デフォルトの名無しさん
08/10/28 03:14:06
>>261
最も基本の Select, SelectMany が抜けてる

>>262
多分、LINQ to SQLだよな
Add がどこから出てきたのか知らんが、対象がTable<T>なら
データ操作にはInsert〜とかDelete〜あたりをつかう


266:262
08/10/28 13:58:59
>>265
どうもありがとうございます。>>262のサイトからさらっと試し始めたので‥‥
InsertOnSubmitを使うんだと分りました。
たぶん、あのサイトは記述が古いんですね。
とっても面白いので、本でも買って真面目に勉強します‥‥

267:デフォルトの名無しさん
08/10/28 17:52:37
>>265
基本といえば Where もないね

クエリ式で書けるものは入れてないのかな?

268:デフォルトの名無しさん
08/10/31 16:20:09
これってORマッピングツールみたいなものか?

269:デフォルトの名無しさん
08/10/31 19:53:08
>>267
ラムダで書くと見た目が不必要に複雑になるからな

270:デフォルトの名無しさん
08/10/31 19:59:39
C#の方は XML to LINQ を無理やりC#構文で書かせるのはなんとかしてほしい。
データ操作まで無理やりオブジェクト指向にするとかえって記述がグダグダになるんだよ。
データ操作は特化した記述がいい。

271:デフォルトの名無しさん
08/10/31 20:27:08
同じ記述でXMLが扱える所が利点なのに?
わざわざ特化した記述作って、新しく覚えないといけなかったら魅力感じないな

272:デフォルトの名無しさん
08/10/31 20:35:02
もしかして関数型構築のこと?

273:デフォルトの名無しさん
08/10/31 22:23:22
>>269
全部クエリ式で書けない場合は,joinとかletとか使わない限りは全部拡張メソッドで俺は書いちゃうな

274:デフォルトの名無しさん
08/11/01 02:17:30
クエリ式みたいなものを自由に拡張できるようにして欲しいお(´・ω・`)

275:デフォルトの名無しさん
08/11/01 02:29:34
そんなことしたらカオスになるじゃないか

276:デフォルトの名無しさん
08/11/01 09:41:51
クエリ式は抽象化の度合いを下げないまま、
foreachをネストさせた時の様に変数を扱えるのが便利だね。

これを拡張可能にすると・・・関数型っぽくなる気がする。

277:デフォルトの名無しさん
08/11/01 09:50:56
>>275
しかしそれがいい・
>>276
調子に乗ってクエリ式つなげてくと遅くなるらしいからなぁ・・・
記述方法は大好きなんだが。


278:デフォルトの名無しさん
08/11/01 10:45:55
>>277
遅くなるってのは意外と平気。
かなりバカに書かない限りはforeach書くのと比べて1割くらいしかパフォーマンス落ちない。

279:デフォルトの名無しさん
08/11/01 11:38:48
遅延評価を繋げるだけならほとんど遅くはならないはず

280:デフォルトの名無しさん
08/11/01 11:49:52
遅い速いは相対的なものだからどのレベルで遅いといってるのか示さないと議論にならない。
非常に細かいパフォーマンスを気にしているなら、
ラムダ式(デリゲート)を使うので関数の呼び出しがインライン化されないとか、
SumやMaxなど集計系メソッドを複数使った場合にちょっと効率の悪いことをしているとか
そんなところだね。

281:デフォルトの名無しさん
08/11/01 12:18:38
Reverseってバッファ使うから即時実行だと思ってたんだけど、Reverseの呼び出し時じゃなくて
最初のMoveNextの呼び出しの時点ですべての結果が決まるから遅延実行になるのか
速い遅い気にするならどういう実装になってるか気にしないといけないね

282:デフォルトの名無しさん
08/11/01 12:31:55
3.0出始めの時に誰かが、foreachで条件とか変換とか並べて書いたのと、クエリ式とか並べて頴田の比べて結構違いがあったような。


283:デフォルトの名無しさん
08/11/01 12:37:47
Linq to ObjectとLinq to SQLは分けないと話が食い違うから要注意。

284:デフォルトの名無しさん
08/11/01 12:44:36
この文脈でどう読んだらto SQLになるのか

285:デフォルトの名無しさん
08/11/01 12:50:21
4.0の紹介ビデオみてるが、よいなぁこれ・・・
来年早々にも出してくれんかな・・・

286:デフォルトの名無しさん
08/11/01 13:11:04
PLINQとか並列化関係いいなぁ・・

287:デフォルトの名無しさん
08/11/05 00:04:48
4.0の紹介ビデオってmsdnにある?

288:デフォルトの名無しさん
08/11/05 00:12:26
URLリンク(channel9.msdn.com)

ちなみに、パスを1段削って、
URLリンク(channel9.msdn.com)
にするとPDCのセッションの一覧が出てくる。

289:デフォルトの名無しさん
08/11/05 00:31:16
thx

290:デフォルトの名無しさん
08/11/06 01:31:48
C#インタプリタ、すげぇ!

291:デフォルトの名無しさん
08/11/06 09:38:50
>>282
URLリンク(ufcpp.net)
これ?

foreach で置き換えるだけじゃたいして性能変わらない。
ここで違いが出てるのはそれの次の節の話で、
「if をループの外に出せ」と同じ原理で
「可能な限り where を from の上に」ってやるとパフォーマンス結構変わる。

292:デフォルトの名無しさん
08/11/06 10:16:15
LINQのクエリ式とSQLの一番の違いがプランナの有無。
クエリ式は書いた順番どおりに処理していくが、
SQLはプランナが最適な実行計画を立てる。

293:デフォルトの名無しさん
08/11/06 10:39:15
LinqtoObjectも気合い入れてプロバイダ書けばプランナ相当のもの記述可能?
いや書く気毛頭無いですが

294:デフォルトの名無しさん
08/11/08 12:26:24
やろうとおもえばLINQでスクリプト言語書けるよ

295:デフォルトの名無しさん
08/11/09 21:52:31
>> 294
出だしだけでもKWSK

296:デフォルトの名無しさん
08/11/11 17:07:42
LINQ to SQLって無くなるの?
なんつーか、ぶちまければ良いってもんじゃねぇだろ。
そんなのはオプソ系に任せとけよ。


297:デフォルトの名無しさん
08/11/11 18:08:39
何で無くなると思ったのさ?

298:デフォルトの名無しさん
08/11/11 18:35:18
なくなるっつーかLinq to Entityに置き換えでしょ。
別に今のところは対して書き方が違うわけじゃないし
Linq to Entity完成までの代打的存在として十分用を果たしたような。

299:デフォルトの名無しさん
08/11/11 22:44:48
うむ。かなりの部分でSQLの開発楽にしてくれた。
ストーリーにちゃんと沿わないと痛い目あうがなwww

300:デフォルトの名無しさん
08/11/11 23:18:07
>>296
開発が止まるだけで今後も当面は.NET Frameworkに標準搭載が続くんじゃないの?

301:デフォルトの名無しさん
08/11/12 00:12:05
Entity Frameworkは絶対こける。
間違いない。

302:デフォルトの名無しさん
08/11/12 00:44:11
>>301
まあVer.3ぐらいになるまでは毎回大変更の嵐だろうな。

303:デフォルトの名無しさん
08/11/12 17:23:24
Entity FrameworkはLinq to SQLの問題点が色々と解決されてるんだけど
デザイナが使いにくすぎる。

RailsのActiveRecordみたいに
ちょこちょこっとクラスに属性を付ければモデル完成、
ってのフレームワークだったらよかったのに。

304:デフォルトの名無しさん
08/11/20 12:30:10
LINQ to SQLってADO.NETより目茶苦茶いいな。
更新系では、生のSQL文に完全なWHERE句を入れてくれるし、
非接続型・楽観的制御(←赤間さん流)では文句なし。
あと、生SQLのサブクエリ相当の組み合わせを段階を踏んで書けるのもいい。
デバッグも迅速になりそう。

305:デフォルトの名無しさん
08/11/20 15:06:45
俺、LINQ to P2P で当てたら結婚すんだ。

306:デフォルトの名無しさん
08/11/20 21:51:19
>>304
消える運命にあるが

307:デフォルトの名無しさん
08/11/20 22:15:10
なんらかの形で残るよ。使ってみれば、この方向性で進化していくんだろうと判る。
今のはちょっとSQL Serverに特化しすぎてるからディスコンかもしれないけどさ。

308:デフォルトの名無しさん
08/11/20 22:16:56
>>307
この方向性で進化した結果がLinq to Entityなんだけど、今のところいまいちの出来。

309:デフォルトの名無しさん
08/11/20 22:32:43
>>308
Entity Framework自体まだ手を付けてないのだが、どういまいち?

310:デフォルトの名無しさん
09/01/04 23:25:17
例えば、
Select Sum(col1),Sum(col2),Sum(col3) from Table1
なSQLだとLINQではどう書くの?

311:デフォルトの名無しさん
09/01/04 23:46:52
>>310
そんな質問はつい最近掲示板で見た事あるな

312:デフォルトの名無しさん
09/01/04 23:59:48
これか。ググったら一発で出てきたw
URLリンク(bbs.wankuma.com)

313:デフォルトの名無しさん
09/01/05 00:53:25
ただのマルチじゃねーかw

314:デフォルトの名無しさん
09/01/07 02:50:59
>>311 >>312 >>313
ケチは付けられても結局答えられる奴いねぇんだな
暇なカス野郎だけかよ

315:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/07 08:09:53
LINQ to SQL、生成されたSQLクエリがどんなのか見れるから試してみればいいんでは。


319:デフォルトの名無しさん
09/01/07 08:21:29
いつもながらLinq to ほにゃららを明記しないと話がこじれるな。
Linq to Entityかもしれない。


320:デフォルトの名無しさん
09/01/07 10:45:44
マルチに答えるとつけあがるからやめとけ

321:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/01/07 14:08:38
ティマイザ→オプティマイザ

324:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/20 07:06:29
>>326
マルチ乙

328:デフォルトの名無しさん
09/02/20 18:50:07
Microsohuto社製品なんて使うからだな

329:デフォルトの名無しさん
09/02/21 04:59:59
>Microsohuto社
中国のばったものの会社?

330:デフォルトの名無しさん
09/02/21 21:28:41
株式会社精密工具

331:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/02/23 00:53:41
データが何個あるか調べて、XMLを作り直したほうが早いと思わんかね?

333:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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を直接変更してもいいと思う。


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4669日前に更新/117 KB
担当:undef