【VB.NET】LINQ友の会【C#, C♯, C#】

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2008/02/09(土) 23:51:34
VisualStudio2008より追加された便利で強力な機能

  統合言語クエリ (LINQ : Language Integrated Query)

ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。
2015/02/12(木) 11:54:05.46ID:RvtVdJIV
PLINQは「C#によるマルチコアのための非同期/並列処理プログラミング」を読んで理解した
他にも多数
2015/02/14(土) 13:20:03.23ID:+2HgOaot
>>903
「ちなみに、筆者は〜」
以降が言いたかったんじゃないの
2015/07/02(木) 08:51:48.28ID:D2cUXZKe
>>903
この人内容もさることながら毎回オーバーな言い回しが好きだよね。もっと淡々と書いてほしい。
907デフォルトの名無しさん
垢版 |
2015/07/23(木) 13:28:14.95ID:8sgAL201
LINQ初心者なんですが、JOIN ON の後に固定文字の条件(o.type_flg Equals "1")を追加したいのですが、
以下の様に書くとエラーになります。
どの様に書けば良いか教えて頂けないでしょうか?
From l In db.table_sub _
Join m In db.table_hist.DefaultIfEmpty On l.cd Equals m.cd _
Join n In db.table_type.DefaultIfEmpty On m.cd_type Equals n.cd_type _
Join o In db.table_jobtype.DefaultIfEmpty On m.cd Equals o.cd And _
m.startdate Equals o.startdate And o.type_flg Equals "1" _  ←"1"この部分
Join p In db.table_office On m.officeid Equals p.officeid _
Where _
l.officeid = pofficeid(cnt) And _
l.startdate <= pDate And _
l.enddate > pDate
2015/07/23(木) 19:33:32.73ID:lwPsZC44
メソッドチェイン以外は分りかねます
2015/07/23(木) 20:03:25.61ID:Lq9yJ8hV
クエリ構文は拒否反応が出てしまう
910デフォルトの名無しさん
垢版 |
2015/07/23(木) 20:28:21.62ID:7HbY3dvy
俺ゃVBに虫酸が走るんだがそれはともかく
JOINの意味分かってっか?
2つのテーブルをお互いの同じ値の列で結合するものだぞ
定数とどうやって結合すんだよ
そういう時はサブクエリ使え
911デフォルトの名無しさん
垢版 |
2015/07/23(木) 20:54:22.15ID:8sgAL201
ありがとうございます。
試してみます。
912デフォルトの名無しさん
垢版 |
2015/08/02(日) 21:53:38.84ID:wrwHaPDN
VB.NETとかダセーもんで
LINQを使おうって発想が凄いな。
2015/08/03(月) 06:58:51.39ID:gHG/w8Da
>>912
それで夏休みの宿題はC#にしたのか
2015/12/03(木) 01:30:32.82ID:R7RcesKX
しばらく.Netから離れてたけどこんなものができてたのか
これはSQLに慣れてる人ならいいけど、文字列クエリーではなく
複数の言語が生で書かれてるソースなんか見たら
初心者にはまったく意味が分からず憤死しそうだな
2015/12/12(土) 01:59:59.54ID:DzcDIrny
すーーぐSQLと同じだと思う輩わくよな

メソッド式で覚えろや

mapやfilterも無い言語やってましたってバレバレだぞ
2015/12/12(土) 16:59:58.44ID:5wAisFzW
データ型がDBに依存しないSQL風インターフェースってだけやで
こんなの業務では怖くて使えんだろう
917デフォルトの名無しさん
垢版 |
2016/03/22(火) 00:38:41.34ID:b9snC88Q
>>916
うわ…
2016/03/22(火) 06:20:38.49ID:2k6rwd23
私の年収低すぎ…?
2016/04/03(日) 00:17:32.34ID:AE7hevoP
上杉謙信:「うわ・・・私の名前・・・うえすぎ・・・」
2016/04/03(日) 01:07:42.06ID:Nd9Yarcw
>>916
いまだにこんなやついるんだな
2016/04/03(日) 21:14:37.69ID:Idd70VLN
WPF同様、普及に失敗したのは紛れもない事実。
2016/04/03(日) 22:32:25.91ID:Nd9Yarcw
>>921
何が?
2016/04/04(月) 03:30:04.72ID:yiUZrBzl
>>921
普及に失敗したんじゃなくてお前みたいな頭の固い奴に理解できないだけの話
2016/04/04(月) 18:28:45.10ID:49o5DZm/
>>921
ここでは触れてはいけいなことをw 馬鹿が発狂するだろw
2016/04/04(月) 19:40:00.45ID:jTJ+Sr63
>>924
日本語www
2016/06/24(金) 12:23:58.14ID:g5yuDP9p
普及したかどうかはどうでもいい
便利なことに変わりはない
927デフォルトの名無しさん
垢版 |
2016/10/08(土) 09:23:14.30ID:vL+1Z5yj
MSは、クエリ式とVB.NETを、そろそろ整理して良いんじゃね?

役目は果たしたよ。
2016/10/10(月) 16:21:53.01ID:tK6m98b5
何回何回負けたって〜
まだ夢の途中〜
生まれ育った地元のために
歌って歌って踊るんだ
イエィ!
2016/10/24(月) 04:53:33.41ID:tBsMM9XP
LINQに書き換えるとすげー遅くなるな。foreachにif分のほうが全然速い。
2016/10/24(月) 23:06:14.75ID:bra729J0
かわりにすげー早く書けるからいいじゃん
2016/10/27(木) 00:34:11.36ID:VLwewB4m
実行速度よりも実装速度のほうが多くの場合大事だもんね
富豪的プログラミングしよう
速度向上は執事に任せればよい
2016/10/27(木) 00:52:45.70ID:o19fKtn+
実行速度とか実装工数なんかどうでもいい
単純に保守の楽な方がいい
2016/10/29(土) 06:52:22.29ID:OuiJcyYe
それが普及失敗の原因か・・・
2016/10/29(土) 10:20:51.57ID:dpmyBZLi
linqは保守もしやすい
ループ構造は間違えやすいしなにをやってるかわかりにくい
Linqなら上から順に読んだ通りに動くから理解が簡単
2016/11/01(火) 04:46:14.83ID:rs3aEitj
保守ができないから採用されないわけで
2016/11/02(水) 02:24:52.83ID:mhG4I3n/
普及に失敗したんじゃなくてお前みたいな頭の固い奴に理解できないだけの話(キリ
2016/11/02(水) 05:47:13.45ID:TUD+TNMg
実際の話、C#使っててSystem.LinqとかSystem.Xml.Linq名前空間が使われてない開発現場なんてあるの?
2016/11/02(水) 08:48:47.99ID:t5KdzDu6
日本は2.0以前に書かれたクソシステムが現役で稼働してるIT後進国だしそりゃあるだろ
2016/11/03(木) 02:34:33.00ID:iotxcKjl
糞遅くて禁止された。2.0コード速すぎ。
2016/11/04(金) 06:07:35.20ID:ELmvCmHq
LINQ使いは自称レベルが高い。
2016/11/05(土) 12:27:36.93ID:z/qQe3IW
別にレベル高くねーよ
文法が新しくて理解できない老害がブーブー行ってるだけだ
LINQのメソッドについて個々に勉強すればすぐに理解できるのに
それを怠って文句言ってるだけ
2016/11/05(土) 12:43:33.36ID:PXYcOtjJ
Linq否定派なんて存在しなく否定派を語る連中はただスレに活気を呼び込みたいだけの愉快犯ということはわかってる
2016/11/08(火) 07:12:19.04ID:vur9C45Y
List<string> strList
があって、それを10個ごとの部分に分けて
List<List<string>> にするLINQを教えてくれ。
2016/11/08(火) 20:19:21.57ID:t3tssHtU
s.Buffer(10).Select(x => x.ToList()).ToList()
2016/11/09(水) 03:54:58.44ID:A4E1noEd
サンキュウ。
でも
List<string>にBuffer(10)は使えなかった。
946デフォルトの名無しさん
垢版 |
2016/11/13(日) 10:01:09.04ID:sNDrzqcx
LINQでZIPファイルのサーチをするにはどうしたらいいんだ? ファイル名だけ
でいいんだけど。
2016/11/13(日) 11:53:01.79ID:y11O8OBy
ファイルの配列をListにしてWhereとか?
でもLinq使う必要ない気がするが?
948デフォルトの名無しさん
垢版 |
2016/11/13(日) 12:17:11.01ID:sNDrzqcx
あっすまん。でけた。Compressionでできるよ。

意味あるとおもうよ。大量にめもりーがいるのに配列にいれると意味ないでしょ。
せっかくLINQつかうんだから。
949デフォルトの名無しさん
垢版 |
2016/11/13(日) 12:43:52.51ID:sNDrzqcx
>66
>LINQとSQLの違いのひとつにプランナの有無がある。
>LINQは処理順に書かなくてはならないし、必ず記述順で処理される。
>LINQはSQLの類似品と考えるより、
>Enumeratorやコールバック(ラムダ)を使ったパイプライン処理であり
>コレクション処理の延長だと思ったほうが誤解がない。

俺もこの理解なのだが、
LINQでDBをアクセスした場合どうなるの? パーフォーマンスは無茶苦茶落ちるって
こと? シーケンシャルに処理してるだけだものな。
2016/11/13(日) 12:54:46.07ID:fBLfWj6L
>>949
EFは内部的に動的クエリを生成してDBにアクセスするからそんな負荷はかからない
951デフォルトの名無しさん
垢版 |
2016/11/13(日) 13:17:46.59ID:sNDrzqcx
そりゃまそうだろうね。でも動的に生成したんでは予想外のことが起こりそう。
パーフォーマンスを致命的に落とす書き方ってあるんじゃなかろうか?
2016/11/13(日) 13:24:00.80ID:fBLfWj6L
あるよ
そこは生産性とのトレードオフ
2016/11/13(日) 15:26:48.72ID:PMfnb6vA
>>949
プランナの有無とか、あくまでも今のLINQの実装なら、て前提があると思うが
基本的にはLINQは遅延実行なので、プランナ入れて最適化する余地はあると思うぞ

DBアクセスに限るなら、LINQがやるのは最終的なSQLを作るだけとも言えるので
後はそのDBのオプティマイザ次第、ってのが理想じゃないかとは思うが
まあSQLの書き方でパフォーマンス差が出るのは事実だし
LINQで最適化されてないSQLが出力されるのもある程度しょうがない
954デフォルトの名無しさん
垢版 |
2016/11/14(月) 07:06:28.58ID:OCTkBwGI
LINQはコレクションを順番に処理するだけのことだからXMLのような文書を検索なんて
実質できないでしょ。誇大広告じゃないかな。
コレクションにすればLINQがつかえるけど、IEnumerableにできなければ使えない。
そこがむつかしいのでは?
2016/11/14(月) 12:45:24.50ID:OCTkBwGI
つーかやってみると奥が深いな。あんまり深入りしないほうがいいな。
select,whereを適当につかうくらいにしておいたほうがいいとおもった
2016/11/14(月) 14:29:26.19ID:OCTkBwGI
var query = from f in FileList
let matches = rx.Matches(f.DirectoryName )
where (matches.Count > 0)
orderby f.CreationTime descending
group f by f.DirectoryName;


これをdesendigとaescendigを切り替えようとおもうと、まるまる2回書かないと
いけないな。
なんかいい方法ないのか?
モードでクエリを切り替えるのって大変だな。
2016/11/14(月) 20:35:23.23ID:ODUYDX4V
>>954
Linqで全てのクエリを賄うのは厳しいよ
パフォーマンスもそうだけど検索対象に特化したDSLの方がやっぱり機能面でも強力だ
ただしそういう場合でも結果をIEnumerableに帰着させるだけでLinqの恩恵を得られるってのは大きいね
そうすれば省メモリかつ高速かつ柔軟に検索した上で後は同じインターフェースを通じて結果をお手軽に処理といった事ができる
958デフォルトの名無しさん
垢版 |
2016/11/16(水) 03:40:03.88ID:wnKhXXqD
せっかくLINQ覚えてもJAVAではつかえないのか? 残念。
2016/11/16(水) 06:12:37.05ID:sZ2S0G8X
Java8の関数型、Stream がLINQと同じ
2016/11/16(水) 12:14:52.63ID:wnKhXXqD
Javaにもあったのか? 本が古すぎた。

ところでクエリー式とメソッド式はどっちが有利なのだ? どっちかにして
ほしいよ。それでなくても覚えることが多いのだから、、
2016/11/16(水) 20:05:50.19ID:gtmrvLDz
散々既出だけどメソッド形式だけでいいよ
クエリ形式はレガシーコードの保守で修正しなきゃならない場合にだけ考えればいい
962デフォルトの名無しさん
垢版 |
2016/11/17(木) 03:40:19.26ID:B+vLCAoF
既出でしたか? 最近LINQを知ったばかりなので、知りませんでした。
2016/11/17(木) 21:48:26.39ID:1A2/m07v
ギャグは顔だけにしてくれ。
964デフォルトの名無しさん
垢版 |
2016/12/09(金) 06:57:30.84ID:9zXSWeUB
var q = from cn in (from n in a select conversion(n))
from m in b select cn + m;


var q = a.Select((n) => new { n, cn = conversion(n) })
.SelectMany((c)=>b, (d,m)=>d.cn + m);

等価らしいが意味が分からない。dはどこからでてきたのだろうか?
2016/12/09(金) 14:49:56.91ID:NMzYP4JF
>>964
http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_08/csharp30_08_04.html

くこか

letの代わりにInt32を取るSelectManyだろ
呼び出されるたびに+1されていく
cとdがそれぞれnとcnに対応する
mがInt32
2016/12/11(日) 11:53:49.51ID:vFkR62Wj
いやいや違うだろ

http://devlights.hatenablog.com/entry/20100715/p1

この例のようにSelectManyの、ここでは2番目のオーバーロードを使っている

つまり
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Console.WriteLine(conversion(a[i]) + b[j]);
Console.WriteLine($"conversion called: {count}");
と同じことをSelectManyを使って一本化してるだけ

1番目のオーバーロードが同じclassのメンバなのでcollectionselectorを使ってないが
ここではa[]とb[]という別々の配列に対して計算結果の二重ループを平坦化したいので
collectionselectorが必要になりこのような書き方になっている
2017/05/25(木) 00:30:45.34ID:hLFywp3s
今更ながらlinqは美しいな。
2017/05/26(金) 10:25:31.49ID:W7QTy6fz
糞遅い。市ね。
2017/06/08(木) 10:57:09.59ID:0C/h20Gd
>>968
遅くねーよ
.NET 4.7 64bit使ってるよな?CPUは何だよ?
2017/06/10(土) 00:30:52.81ID:iwxerOOa
速くなるわけがない。
2017/06/14(水) 01:47:53.79ID:osSxyyDu
ちゃんとベタに書いたコードに比べたら無駄なコードが入るので速くはならいよ。
比べたらそりゃ遅いに決まってる。
2017/06/15(木) 07:42:14.92ID:pzpB7PXh
副作用を検知して、自動で並列化するようになれば、
linqで書いといた方が速いってことにもなりそうだけど
2017/06/17(土) 05:54:49.47ID:Q2thxGyP
他でドヤ顔してLINQ書いてる馬鹿がいて、
for + if でそのまま仕様どおり書いたら何倍も速かったってオチがあったな。
2017/06/17(土) 16:13:15.19ID:O4zo0eqa
可読性より速度が大事ならいいんじゃない
975デフォルトの名無しさん
垢版 |
2017/06/22(木) 06:38:35.83ID:v39t46ad
違いが分かるほど差が出るってどんな用途だよ??
そんなに速度欲しいならC++で書いたほうがいいんじゃないの
2017/06/30(金) 09:16:50.65ID:VRcvSEbT
C#は糞遅いからな。
C#でもJavaでもPythonでもライブラリはみんなC++で書かれてるのは他が糞遅いから。
2017/06/30(金) 10:32:08.74ID:YD6uFwbU
C#より速い言語をあげてください
2017/07/02(日) 05:05:09.61ID:oEcBkrJ7
LINQが遅いのは分るがC#自体はそれほど遅くはない。
2017/07/04(火) 13:43:58.23ID:VgVQ93XC
C#ってネイティブコード吐けるの?
2017/07/05(水) 07:02:18.26ID:0I1uRl92
C#自体の遅い速いじゃなくて
LinQと普通のベタコードの違いが分かるくらい速度を求める処理するなら
最初から素直にC++使えって事だろ
2017/07/05(水) 12:56:08.45ID:SCEaR+bW
LINQ使うから遅くなるだけで普通に書けばまぁまぁ速度は出る。ガチのC++には勝てないがね。
2017/08/09(水) 07:30:25.84ID:0sQ4qce6
C#より(開発環境インストールするのにかかる時間が)速い言語をあげてください
2017/08/22(火) 17:35:45.83ID:NIBb7Mxl
当然のことながら、結局、普及しなかったな。
2017/10/23(月) 21:57:55.15ID:budLyErM
>>975
LINQの句理解せずに適当に使って無駄なループしてたってオチじゃね
2017/10/24(火) 20:03:02.29ID:dTnbV75y
LINQは川俣本でいいから読んどくべきだな
実行時間を削る事にかけてはストイックなほどの本
2017/10/25(水) 10:51:42.48ID:hJQiC82m
このスレといい関数言語スレの過疎っぷりといい、
C#スレで暴れてたキチガイって結局一人だけだったんだな。
2017/11/05(日) 18:36:31.69ID:GvmpunB7
987
2017/11/05(日) 18:37:02.13ID:GvmpunB7
988
2017/11/05(日) 18:37:27.51ID:GvmpunB7
989
2017/11/05(日) 18:37:57.71ID:GvmpunB7
990
2017/11/05(日) 18:38:21.67ID:GvmpunB7
991
2017/11/05(日) 18:38:46.11ID:GvmpunB7
992
2017/11/05(日) 18:39:11.03ID:GvmpunB7
993
2017/11/05(日) 18:39:35.87ID:GvmpunB7
994
2017/11/05(日) 18:40:01.28ID:GvmpunB7
995
2017/11/05(日) 18:40:25.86ID:GvmpunB7
996
2017/11/05(日) 18:40:51.30ID:GvmpunB7
997
2017/11/05(日) 18:41:15.86ID:GvmpunB7
998
2017/11/05(日) 18:41:40.95ID:GvmpunB7
999
2017/11/05(日) 18:42:08.10ID:GvmpunB7
1000
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 3556日 18時間 50分 34秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況