【VB.NET】LINQ友の会【C#, C♯, C#】
レス数が950を超えています。1000を超えると書き込みができなくなります。
VisualStudio2008より追加された便利で強力な機能
統合言語クエリ (LINQ : Language Integrated Query)
ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。
メソッドの方が一行プログラムみたいで好き
他のメソッドをあれだけ続けたら普通怒られるのにLINQだと怒られないから好き SQLと同じ単語使いながらも文法違うのがきついので専らメソッドです コンパイルで結局メソッド式に変換されるし
クエリ式で出来ないメソッドもあるし
他の部分のコードと見た目が変わるし
SQLと順序が違うからメソッド式だな fromが2つ以上出てくるときはクエリ式かな
SelectManyはめんどい SQLならなんとか基本を覚えたけどLINQとかXMLってめんどうなら覚えなくても生きていけるんでしょ? 別にSQL覚えなくても生きる世界を選べば生きていけるよ このスレの最初の方見れば、覚えるのと覚えずにいるのとどちらが面倒か判ると思うんだが Java8でStramAPI導入されたし、今後増えてくんじゃね。
個人的には今の時点でも普及してると思うけど。 もうLINQ知らんVB厨でも知らずに呼び出してそうだが ForEachとかParallel.Forとか
高度なことを簡単に書けるから凄いよな。
入社して既存ソース見てへーと思って
バンバン使ってる若い人とか多そう Rxなんかは初めての人は戸惑うだろうけど
LINQは拡張メソッドで逐次処理してるだけで難しい所なんてないだろ…。 それが未だにラムダ式の記述とかに嫌悪感示す人多いんだな・・・
この記事見て段階的に覚えるのも手だと思うんだが、結果一緒なら別に良いって人相手にはどうもにならん
http://www.atmarkit.co.jp/fdotnet/chushin/roadtolinq_01/roadtolinq_01_02.html 大手SIer()とかでラムダ式禁止ってコーディング規約が出てくるのはむしろこれからが本番。 そういう奴等が死に絶えるまで、どうやって生き延びるかだよなw ポインタが理解できずにCから逃げたコボラーとか実際に存在するから
Linq程度が理解できなくても不思議じゃないわ 保守、テストに向かないラムダ式が業務コードに採用されることはない。
採用okした馬鹿SEがいたら初めから保守する気がないやっつけプロジェクトだと客は思え。 おまえがPMになる頃に分るよ。LINQ?ないでしょ!!と言うようになる。 相手を納得させる説明ができない場合、相手の理解能力の不足へと責任を転嫁します >>874
ほんとアスペ連呼厨はアスペはだったな。じゃあ予算以外に何の基準あると言うの?
何の説明もなしに理解できない連呼して突然に脈絡もなくアスペとか言われてもな意味不明。
それとも基準と言ってるのはもしかして、
LINQが保守しにくいという理由が分らないという素人PGレベルの話?w
さすがにそれはこっちも想定外。相手は素人の客ではなくPGだと思って話しているから。ブログラム板だし。 プログラム板だから技術的な観点から保守・テストの向き不向きを聞いたつもりだったんだが、唐突に予算の話だからさっぱりだったんだ…
聞き方が悪かったな >>876
> LINQが保守しにくい
自分がバカですって自白してるの? プログラム技術の板なのになんでいきなりプログラム技術のレイヤーすっ飛ばして予算がどうこう言い出すんだ
いずれにしろ「分かりきった事だ」しか言ってないし 多少単価が上がっても、それを上回る生産性があればペイするわけで
規模も生産性も無視して予算って言われてもなぁ
まともなマネージャーの発言とは思えん
まあ俺がプログラマなら、クエリ式はともかく今時メソッド式すら禁止でプログラム組みたくないが >>879
馬鹿かおまえは。保守性の基準とプログラム技術に何の関係があるんだ。
マ板行け、低学歴。 他に誰も読めないからC言語禁止、BASICで書け、とか言って滅んでいった馬鹿が
たくさんいたわけだが、滅んでいった奴のことは誰も覚えてないから、あとからあとから
同じような馬鹿は居るわけだよなw 適切な粒度のLINQが一番保守しやすい。
でもLINQで複雑なの組むと保守し辛いのには同意する。
かと言って何重にもネストしたforeachの保守性が優れているかって言うとそうでもないしなー。
チーム開発では、副作用あるようなのはforeachに任せて、LINQではデータの抽出に専念するみたいな何らかの指標は必要だと思う。
「馬鹿には扱えないから禁止な!」って言われるような地獄じゃなかった事を心底嬉しく思うわ…そういう環境の人はご愁傷様。 COBOLのプロジェクトに必ずいるよな。Perlでいいじゃんという馬鹿が。 RxのサブプロジェクトのIxは皆使わないのかな?
https://www.nuget.org/packages/Ix-Main/
余り話題にならないようだが >>886
何それ?と思ってググってきた。
http://gushwell.ldblog.jp/archives/52257023.html
痒いところに手が届く感じが嬉しいな。
この中のいくつかは自分で似たようなの作って使ってたわ ラムダ式禁止ってLINQのIEnumerableな拡張メソッドまでならいいのか? 昔懐かしき匿名デリゲート使えばいいとかご苦労さんだよな
int[] arr = { -3, -2, -1, 0, 1, 2, 3 };
var e = arr.Where( delegate( int n ){ return n < 0; } ); >>889
ラムダ式覚える気無い人から、xじゃわからないからこう書けよって言われそうで怖い
流石にデリゲートは知ってるよな・・・ var arr = { -3, -2, -1, 0, 1, 2, 3 };
foreach (var item in arr.Where( x => x < 0 ))
arrをvarにしてラムダ式の()とreturn省略してforeachに突っ込んだら発狂して死ぬんじゃなかろうか? >>887
準公式でForEachが定義されているだけでも使う価値がありますわ 出たばっかりの2008年当時は、皆手探りで専用スレに情報を集約する必要があったけど
今では.NET開発者の間に根付いて、初心者質問スレで普通にやり取りされるようになってるからね。
LINQ専用スレは役目を終えた感がある。 最初のころ友人に「リンク?リンキューって読むんだよ」って教えられて信じた俺は負け組 LINQってどう使うんだろうと思ってたけど、
使い方が解ると糞便利過ぎて吹いた。 linqとかgenericとかそんなもん覚えて
嬉しそうに使っている奴らは馬鹿じゃあ
ないかと思う。俺みたいなレベルになると
そんなもんは使わない。何故なら難しいから。 なんだこれPLINQで何がどう並列化されるか理解してない典型じゃん…
ttp://www.atmarkit.co.jp/fdotnet/csharp4/csharp4_03/csharp4_03_03.html PLINQは「C#によるマルチコアのための非同期/並列処理プログラミング」を読んで理解した
他にも多数 >>903
「ちなみに、筆者は〜」
以降が言いたかったんじゃないの >>903
この人内容もさることながら毎回オーバーな言い回しが好きだよね。もっと淡々と書いてほしい。 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 俺ゃVBに虫酸が走るんだがそれはともかく
JOINの意味分かってっか?
2つのテーブルをお互いの同じ値の列で結合するものだぞ
定数とどうやって結合すんだよ
そういう時はサブクエリ使え VB.NETとかダセーもんで
LINQを使おうって発想が凄いな。 しばらく.Netから離れてたけどこんなものができてたのか
これはSQLに慣れてる人ならいいけど、文字列クエリーではなく
複数の言語が生で書かれてるソースなんか見たら
初心者にはまったく意味が分からず憤死しそうだな すーーぐSQLと同じだと思う輩わくよな
メソッド式で覚えろや
mapやfilterも無い言語やってましたってバレバレだぞ データ型がDBに依存しないSQL風インターフェースってだけやで
こんなの業務では怖くて使えんだろう 上杉謙信:「うわ・・・私の名前・・・うえすぎ・・・」 >>921
普及に失敗したんじゃなくてお前みたいな頭の固い奴に理解できないだけの話 >>921
ここでは触れてはいけいなことをw 馬鹿が発狂するだろw 普及したかどうかはどうでもいい
便利なことに変わりはない MSは、クエリ式とVB.NETを、そろそろ整理して良いんじゃね?
役目は果たしたよ。 何回何回負けたって〜
まだ夢の途中〜
生まれ育った地元のために
歌って歌って踊るんだ
イエィ! LINQに書き換えるとすげー遅くなるな。foreachにif分のほうが全然速い。 実行速度よりも実装速度のほうが多くの場合大事だもんね
富豪的プログラミングしよう
速度向上は執事に任せればよい 実行速度とか実装工数なんかどうでもいい
単純に保守の楽な方がいい linqは保守もしやすい
ループ構造は間違えやすいしなにをやってるかわかりにくい
Linqなら上から順に読んだ通りに動くから理解が簡単 普及に失敗したんじゃなくてお前みたいな頭の固い奴に理解できないだけの話(キリ 実際の話、C#使っててSystem.LinqとかSystem.Xml.Linq名前空間が使われてない開発現場なんてあるの? 日本は2.0以前に書かれたクソシステムが現役で稼働してるIT後進国だしそりゃあるだろ 別にレベル高くねーよ
文法が新しくて理解できない老害がブーブー行ってるだけだ
LINQのメソッドについて個々に勉強すればすぐに理解できるのに
それを怠って文句言ってるだけ Linq否定派なんて存在しなく否定派を語る連中はただスレに活気を呼び込みたいだけの愉快犯ということはわかってる List<string> strList
があって、それを10個ごとの部分に分けて
List<List<string>> にするLINQを教えてくれ。 s.Buffer(10).Select(x => x.ToList()).ToList() サンキュウ。
でも
List<string>にBuffer(10)は使えなかった。 LINQでZIPファイルのサーチをするにはどうしたらいいんだ? ファイル名だけ
でいいんだけど。 ファイルの配列をListにしてWhereとか?
でもLinq使う必要ない気がするが? あっすまん。でけた。Compressionでできるよ。
意味あるとおもうよ。大量にめもりーがいるのに配列にいれると意味ないでしょ。
せっかくLINQつかうんだから。 >66
>LINQとSQLの違いのひとつにプランナの有無がある。
>LINQは処理順に書かなくてはならないし、必ず記述順で処理される。
>LINQはSQLの類似品と考えるより、
>Enumeratorやコールバック(ラムダ)を使ったパイプライン処理であり
>コレクション処理の延長だと思ったほうが誤解がない。
俺もこの理解なのだが、
LINQでDBをアクセスした場合どうなるの? パーフォーマンスは無茶苦茶落ちるって
こと? シーケンシャルに処理してるだけだものな。 >>949
EFは内部的に動的クエリを生成してDBにアクセスするからそんな負荷はかからない そりゃまそうだろうね。でも動的に生成したんでは予想外のことが起こりそう。
パーフォーマンスを致命的に落とす書き方ってあるんじゃなかろうか? レス数が950を超えています。1000を超えると書き込みができなくなります。