【VB.NET】LINQ友の会【C#, C♯, C#】at TECH
【VB.NET】LINQ友の会【C#, C♯, C#】 - 暇つぶし2ch271:デフォルトの名無しさん
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を直接変更してもいいと思う。

335:デフォルトの名無しさん
09/04/14 23:27:35
WPF の UIElementCollection に対して、
Linq の機能(Where メソッドとか)を使いたいのですが、
UIElementCollection にはそのメソッドがありません。

どうすれば Linq の機能が使えるでしょうか?

336:デフォルトの名無しさん
09/04/14 23:34:03
あー、non-generic な IEnumerable に対する Where とかないのか・・・
いったん、 .OfType<UIElement>() っての通すと使える気がする。


337:デフォルトの名無しさん
09/04/15 11:49:27
OfTypeじゃなくて,元のコレクションに違う型が入ってないことを仮定するCastのほうがベター
※foreach(UIElement item in collection)相当
OfTypeを使うのはOfType<Button>みたいに意図的に型をフィルタリングするときだけ

338:335
09/04/16 21:20:12
>>336 >>337
ありがとうございました。


339:デフォルトの名無しさん
09/04/19 23:45:46
良スレなのに過疎ってて残念。

340:デフォルトの名無しさん
09/04/20 12:48:21
SQLは糞

341:デフォルトの名無しさん
09/04/20 18:09:58
何をもって糞と判断してるのか

342:デフォルトの名無しさん
09/04/20 20:08:48
互換領域の文字だからだな

343:デフォルトの名無しさん
09/04/20 22:24:47
 int[] a = new int[] { 1, 2, 3 };
 a.ToList().ForEach(i => Trace.WriteLine(i) );

ForEach するために毎回 ToList() してるんだけど、
ToList() しなくてすむ方法ないの?


344:デフォルトの名無しさん
09/04/20 22:33:14
>>343
素直に foreach (var i in a) するか、自分で IEnumerable 用の ForEach 拡張メソッド書くか。

345:デフォルトの名無しさん
09/04/20 22:35:22
URLリンク(neue.cc)

346:デフォルトの名無しさん
09/04/20 22:59:17
DataTrigger で特定の Rectangle だけ色を変えようと思って、
TargetName を指定したら、Style では TargetName は指定できないという
エラーが出てしまいました。

回避する方法はありますか?

347:346
09/04/21 06:16:25
すんません、誤爆です。

348:デフォルトの名無しさん
09/04/25 15:04:39
from age in

349:デフォルトの名無しさん
09/04/25 15:04:53
.

350:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/05/21 21:21:06
.NETとVisual Studioってどういう関係ですか?
.NETの後継??

353:デフォルトの名無しさん
09/05/21 21:32:08
.NETは.NET
Visual StudioはVisual Studio

354:デフォルトの名無しさん
09/05/21 22:07:37
パイナップルと酢豚みたいなもんだな

355:デフォルトの名無しさん
09/05/21 22:08:10
>>354
それだと、.NETは要らない子になっちまうじゃないか。

356:デフォルトの名無しさん
09/05/21 22:59:46
>>354
吹いたww

357:デフォルトの名無しさん
09/05/21 23:13:02
パイナップルのない酢豚なんて・・・

358:デフォルトの名無しさん
09/05/22 13:52:09
オレも邪魔だと思ってたが、無いと寂しいw

359:デフォルトの名無しさん
09/05/22 14:38:39
で、

.NET = パイナップル
VS = 酢豚

っていう結論でいいのか?w

360:デフォルトの名無しさん
09/05/30 17:03:50
.NET = フレームワーク
VS = IDE



361:デフォルトの名無しさん
09/06/01 13:49:45
>>360

ありがと!謎が解けました!!

362:デフォルトの名無しさん
09/06/24 16:09:02
>>244-246って他社製のプロバイダ使ってってこと?

363:デフォルトの名無しさん
09/07/08 22:18:41
LINQ to Object やyield returnを使っていて
ふと「これ、何のために使っているんだろう」と思ってしまう。
旧.netと互換性がなくなる上に、実行速度は条件次第(そして多くの場合)落ちるし。

これらの目的は「可読性を上げる」って認識でおk?

364:デフォルトの名無しさん
09/07/08 22:31:05
yield return は 2.0 からあるぞ。それより前となると
Generics もないので互換性気にするだけアレというか・・・

Linq to Objects は遅くなるのは確かだけどスケーラビリティは
あるんだよなぁ。Linq がといったほうがいいかもしれないけど

365:デフォルトの名無しさん
09/07/08 22:35:58
とりあえず書いて楽になったとおもわんか?
思わないなら別に使わなくていいだろ。
自分はIEnumerable<T>系を自分のライブラリでも多用してるし、yield使わないでIEnumerable返すコードなんか書きたくもないが。

366:デフォルトの名無しさん
09/07/08 22:36:57
MSはyield使いまくってるよ
yieldはフレームワークを作る人のための機能、LINQは使う人のための機能だな

367:デフォルトの名無しさん
09/07/08 22:38:09
.NET 4.0 のPLINQに期待。
CTPで試したけど、お手軽並列化はかなり便利だった。

368:デフォルトの名無しさん
09/07/08 22:38:59
トン。なるほど。
確かに非常に楽にはなるし、拡張も楽だし、バグも入りにくいと思う。

でも、コードレビューに速度至上主義者がいるとそれが理解されないのよね。

369:デフォルトの名無しさん
09/07/08 22:48:23
実際にボトルネックになるような場所でlinq使って叱られるのは当然だが
「なんか遅そうなコード」を見ただけで騒ぐのは
速度至上主義者じゃなくてただの阿呆や

370:デフォルトの名無しさん
09/07/08 22:49:54
別にそれ自身遅いもんじゃないよ
IEnumerableを返すメソッドを手で書いたところでyieldより効率のいいものができるとは考えにくい
LINQは素直すぎるだけだ

371:デフォルトの名無しさん
09/07/08 23:08:48
妄想で語っている人多い気はするね、LINQは初回の実行の時はコンパイルが入るから遅いのは分かるが
一度実行されると、二回目からは高速化する構造になっているしね。
LINQを使わない場合は、平均して中速になる。
ある意味LINQを使わないというのはパフォーマンス的には使いやすいかもしれないが、コーディングの楽さとそこそこのパフォーマンスの両得確保を目指すなら
LINQは外せないはず


372:デフォルトの名無しさん
09/07/08 23:14:43
そういうパフォーマンス厨いるけど、実行速度に影響するのはそういう部分じゃなくデータ構造とか効率的なアルゴリズムとか。
LINQでのパフォーマンスの劣化なんてよっぽどの所でないと誤差の範囲。

373:デフォルトの名無しさん
09/07/08 23:20:03
>>371
式木とクエリ式混同してない?

少なくとも、LINQ to object は動的生成一切ないよ。
foreach でコレクション操作するのに比べて、
静的メソッド呼び出しがちょっと増えて、その分のパフォーマンス落ちる程度。
静的メソッド呼び出しのコストなんてほんとたかが知れてて、
ほんの数%の最適化が必要な超クリティカルな場面以外は気にする必要ない。


374:デフォルトの名無しさん
09/07/08 23:24:03
パフォーマンスについては間違ってる
クエリ演算子を繋げることによってネストされた列挙子ができて、列挙自体のコストがちょっとだけ増えるんだよ

375:デフォルトの名無しさん
09/07/08 23:26:16
ああ、そか。
かかるコストは静的メソッド呼び出し分じゃなくて、
仮想メソッド分になるか<列挙子のネスト。

376:デフォルトの名無しさん
09/07/08 23:27:55
なんか適当な事書かれているような気がするぞ
foreachなどでやる場合は、連続したシーケンス操作では計算した値を何処かに確保して
また計算してというのが繰り返されているのに対して、クエリをバシバシつなげた場合は、中間データが作られないで処理される。
データ処理が縦に輪切りで処理するか横に輪切りで処理するかが変わる
この時決定的な差として、キャッシュの使用量がLINQを使った場合の方が小さくなって結果的に高速化するケースは多い。
オレはこっちの効果を重要視している

377:デフォルトの名無しさん
09/07/08 23:29:27
>キャッシュの使用量
CPUのデータキャッシュの事ね、今のプロセッサではこれが決定的なパフォーマンスを決める

378:デフォルトの名無しさん
09/07/08 23:36:57
LINQ使うときは最後まで列挙や評価を行わせないのが重要
Reverseみたいに、遅延実行の演算子の中にも危ないのがあるので注意

379:デフォルトの名無しさん
09/07/08 23:37:56
yieldは結構便利なことに気付いた。
配列を返させてたところはこれに変えられる。

380:デフォルトの名無しさん
09/07/08 23:38:06
>>378
気にしなくていいと思うけどね、よほどの問題が発生しない限り

381:デフォルトの名無しさん
09/07/09 00:00:11
>>376
実際のところ、測ってみたら速くならなくない?
1段ラッパーされてる分のペナルティの方が大きくて。

そういうレベルの話よりは、
データ列の処理ってのを1段階抽象化してるから、
LINQ to SQL/Entity みたいなクエリ化もできるし、
PLINQ みたいな並列化もできるしって辺りの
もっと抽象度高い話しないと LINQ の価値出ない気も。


382:デフォルトの名無しさん
09/07/09 00:09:58
デリゲート呼び出しのコストがやっぱり大きいんじゃないかな
使い方を変えずにExpressionTreeで一つの大きな列挙子に展開することだって可能なわけで、
そういうところがLINQのポテンシャルなんだろうな

383:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/09 08:40:19
くだらない事やらずに分かりやすく書けやクズ

385:デフォルトの名無しさん
09/07/09 08:44:04
インライン展開はMethodImpl属性で抑制できるぞ

386:383
09/07/09 09:18:21
すまん、すまん。糞したり飯食ったりしてて続きを書くのを忘れていた。

Enumerable.Whereで条件を指定するところなどLinqの随所にdelegateが使われているわけだ。
その部分をdelegateを使わない形に書き直せば、yieldや拡張メソッドを使っていても、
多重ループで書いたのとそう変わらない結果がでる。

>>382
>デリゲート呼び出しのコストがやっぱり大きいんじゃないかな 
に同意と言いたかった。

>>385 おおありがとう。インラインの抑制はそのほうがスマートですな。

387:デフォルトの名無しさん
09/07/09 09:36:21
デリゲート呼び出しは通常の関数呼び出しの一割り増しぐらいだと外人の誰かがブログでグラフ付きでかいとったな。
ああいうページいつもどこ行ったか忘れちゃうんだよな・・・


388:デフォルトの名無しさん
09/07/09 09:50:59
いかにデリゲート呼び出しが速かろうとベタに書くよりはそりゃ遅くなるに決まってる
最適化できなくなるんだから

389:デフォルトの名無しさん
09/07/09 10:00:52
だから遅くても許容範囲なんじゃねーのって話だろ。
そんだけ速いの欲しかったらアセンブラで書いとけよ。

390:デフォルトの名無しさん
09/07/09 13:22:47
それでも・・・僕はLINQを使うんだ!

391:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/10 01:26:45
クエリ式に固執しなければいいんじゃね?

393:デフォルトの名無しさん
09/07/10 05:27:16
source.Select((Data, i) => new { Index = i + 1, Data });
クエリ構文だとやれることが少ないことに気づくと、だんだメソッド構文ばかり使うようになる

394:デフォルトの名無しさん
09/07/10 08:19:37
トン
こんな便利なバージョンがあったとは。

395:デフォルトの名無しさん
09/07/10 16:21:58
C#のLINQは大事なものはほとんど拡張メソッド版になっているよ
ムキになってメソッドでやるのもどうかと思うんだが……
VBのXMLリテラルなんぞを見ていると、やっぱ便利だし読みやすいし。
あんまり拡張メソッドに拘って欲しくないんだけどな

396:デフォルトの名無しさん
09/07/10 22:45:31
XMLリテラルってXLINQだろ
XLINQ自体は良いものだとは思うけどそんな普及するかどうかもわからない
実験的なものをいきなり言語に組み込むとか

397:デフォルトの名無しさん
09/07/10 23:20:37
全然違うような

398:デフォルトの名無しさん
09/07/11 00:00:36
VBは使ったことはなかったけど…イコールではないよね。
XMLリテラルはXDocumentやXElementといった
LINQ to XMLのクラスを使っているだけで。

って、LINQ to Schema for VB SUGEEEE!!こりゃ楽だわ。C#じゃ使えないのか。

399:デフォルトの名無しさん
09/07/11 00:09:02
だからLINQ to SQLみたいにLINQ to XMLがコケたらどうしようもないだろ
言語仕様レベルで依存してるんだから
それくらいしないとVBユーザーは新しいものを使おうとしないだろうとか考えたのかな

400:デフォルトの名無しさん
09/07/11 00:16:09
Linq to Xmlは別にこけるこけないって次元の中身ではないと思うけど。
使ったことないで言ってるでしょ。

401:デフォルトの名無しさん
09/07/11 01:13:05
Linq to XMLはC#では言語構文の拡張は何もやってない。
使ってるのはLinq to Objectの構文だけで、拡張はクラスライブラリだけ。
VBでは言語構文の拡張もやってて、XMLリテラルもその一種。


402:デフォルトの名無しさん
09/07/15 18:58:43
この流れを見て、LINQ to XML触ってみた
書き方はすごく楽だね、こりゃ。

…けど、これってLINQ to XMLで書いてしまうと
XMLでデータの不整合や値のレンジ外が見つかった時に
XMLのエラー箇所を通知するのが難しい気がする。
例外できないんじゃ実用性って…

403:デフォルトの名無しさん
09/07/15 22:02:46
あるある。
LoadOptions.SetLineInfoを活用しようとして、
ToDictionaryの代わりにToLookup+重複のないことの検査したり、
Count != 1なら自前の例外を投げてから、Single呼んだりする羽目になっている。

404:デフォルトの名無しさん
09/07/15 22:18:29
>>402
スキーマ検証周りならベースにまず XmlReader を使え。
XmlReaderSettings で XmlSchemaSet が指定できる

XLinq 上でもエラー処理したいときは、読み込み周りのオプ
ションで XmlReaderSettings の指定とさらに LoadOptions の
SetBaseUri や SetLineInfo オプションも忘れずに


405:デフォルトの名無しさん
09/07/16 00:18:20
トン、とても参考になった。SetLineInfoはかなり便利そう

>>403
後、フィルタ以外を全部取り除いておいて最低限にしておいて
データ一個だけ処理する関数を作ってその中で処理したり
 return from p in hoge.Elements("Hoge")
   where (int?)p.Value < 0
   select CreateHogeInstance(p); ←この中で整合性チェックして例外を投げる
結構マヌケな作りな気がする。

406:デフォルトの名無しさん
09/07/16 00:20:28
C#なら拡張メソッドがんがん作ってそういうのをチェックしながらのWhereとか例外メッセージつきのSelectとかいろいろ作りゃいいんじゃねーの。
0スタートのindexがくっついてくるSelectWithCountとか自分的に便利。

407:デフォルトの名無しさん
09/07/16 04:16:14
>>406
それって標準のと何が違うの?
URLリンク(msdn.microsoft.com)

408:デフォルトの名無しさん
09/07/16 08:01:45
index 付きの Select、みんなが意外知らない便利機能だけど、
まったく同じ機能を再発明しちゃった人までいるのか。

409:406
09/07/16 08:29:31
・・・(´・ω・`)
WhereWithCountとか色々作ったのに・・・

410:デフォルトの名無しさん
09/07/16 10:22:56
引数なしのAny()とかも影薄いよな
Count() > 0とかやっちゃってる人も多そう

411:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/16 14:51:15
手軽に作れるのが魅力の1つだよな

413:407
09/07/16 17:27:01
>>410
> Count() > 0とかやっちゃってる人
……、ごめんなさい。私です。

>>411
それ、自分はC++から来たからForEachって名前にしたい、特に後者。

414:デフォルトの名無しさん
09/07/16 17:42:57
List<T>との整合性を考えても、ForEachの方がしっくりくるな

415:デフォルトの名無しさん
09/07/16 19:36:16
>>413
Count使うと最後まで読まないといけないからパフォーマンスが悪いはず
Anyは一件あるかないかだから速いはず

416:デフォルトの名無しさん
09/07/29 01:05:17
URLリンク(www.infoq.com)

417:デフォルトの名無しさん
09/09/12 18:41:51
ヌルポ

418:デフォルトの名無しさん
09/09/12 19:39:22
LINQと例外処理ってどうやって組み合わせている?

IEnumerableを参照する全ての場所で例外が起こるかもしれない、
となると例外安全の確保をしなきゃならない範囲が滅茶苦茶広くなるし、
任意のtry-catchで捕まえることもできない。
自分は「LINQ中に例外を外に投げる処理は入れるな」で対応している。

419:デフォルトの名無しさん
09/09/12 23:31:27
LINQからIEnum処理するところすべてtry-catch(´・ω・`)


420:デフォルトの名無しさん
09/09/13 00:16:47
それは、不毛過ぎるw

421:デフォルトの名無しさん
09/09/14 20:55:08
配列の要素を2個ずつ処理したいときにはどうすればいいでしょうか?

ruby の each_slice みたいなのがやりたいのですが。

422:デフォルトの名無しさん
09/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
09/09/15 15:00:48
>>422
ありがとう。

424:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/16 06:48:18
まあどっちでもいいんじゃない?
拡張メソッドはガンガン使うべきなのかは迷うところ。

426:デフォルトの名無しさん
09/09/16 21:47:09
イベントをLINQっぽく操れるリアクティブフレームワークってのを最近知ってからというもの
.NET4.0とラブプラスのことで頭が一杯です。


427:422
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/17 17:10:47
次はforをForEach()にするんですね

430:デフォルトの名無しさん
09/09/17 19:00:29
427のはあまり良くないと思う。
422のyield return bufを
yield return buf.ToArray()に変えるだけで良いかと。
あと最後はbuf.Take(i)でいいかな。

431:デフォルトの名無しさん
09/09/17 19:07:12
sourceがIList<TSource>を実装しているか否かで場合分けするのが効率的か

432:デフォルトの名無しさん
09/09/27 19:20:03
条件に合うものと合わないものを分けるために、

bar = foo.Select(i=>Baz(i) );
foo = foo.Select(i=>!Baz(i));

みたいに2回Selectしてるんですが、
1回で済む方法ないですか?

433:432
09/09/27 19:23:15
間違いました。 where を2回です。

434:デフォルトの名無しさん
09/09/27 19:24:56
欲しいのはどっちなの?
両方ほしいなら2回しないといけないと思うけど。
やりたいことが見えない。

435:デフォルトの名無しさん
09/09/27 19:37:47
両方欲しい場合、自前でループを廻せばワンパスで振り分けできるけど、
Linqで同じようにできないか、っていう質問だろうね。
気持ちは分かるけど多分できないんだろうなあ。

Linqの想定用途はあくまで選択や射影の簡略化だろうし、振り分け処理で
無理矢理Linq使う必要無いんじゃない?と思う。foreachでいいじゃん。

436:デフォルトの名無しさん
09/09/27 19:49:14
そういうメソッドを自作すればいい。
IEnumerable<T>受け取ってTuple<IEnumerable<T>, IEnumearble<T>>でもを返すようにしてさ。

437:432
09/09/27 19:58:37
優先度のある条件を集合に適用する処理を
以下のように書きました。

foreach(var 条件 in 条件リスト){
var マッチしたもの = 集合.Where(条件)
集合 = 集合.Where(!条件)
 (マッチしたものに対する処理)
}

というループを書いていたのですが、
ruby の partition メソッドみたいなのがあれば
一回ですむじゃん。
と思ったのですが、ヘルプをみてもわからず、
ググってもわからず、なので質問させていただきました。

処理が重いので1パスにしたいというわけではないので、
2回 Where するままにしておきます。

レスありがとうございました。

438:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/27 21:04:04
だね。
ruby の partition メソッドはズバりGroupBy。
ToLookupはその即時評価版。

440:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 19:43:10
プログラミングC#でLINQの項目をちょっと読んでみたが、
C#のコード中に普通にselectとかfromとか書くのは違和感あるなぁ。
C#の予約語になってんのかね?


442:デフォルトの名無しさん
09/10/10 19:44:40
>>441
文脈キーワード

443:デフォルトの名無しさん
09/10/13 12:02:58
LINQって別に最適プランとか計算しないんでしょ?

ほんのちょっと前までデータベースからデータを「SELECT * FROM TABLE」で持ってきて
コード内でデータの取捨を行うなんて、やっちゃだめの最右翼だったのに、すんげえ
富豪的プログラミングだなあ…。

444:デフォルトの名無しさん
09/10/13 12:30:06
WHERE句はあるには有るけど
内部で式評価を最適化しているわけではない

445:デフォルトの名無しさん
09/10/13 12:54:50
Linq to Objectにはプランナはない。命令の順番で処理される。
Linq to SQLやEntity Frameworkの場合はDBMSのSQLに翻訳されるから、
DBMSのプランナが機能する。


446:デフォルトの名無しさん
09/10/13 19:08:08
LINQ to SQLって、要するに式ツリーからSQLを生成するORMという理解でOK?

447:デフォルトの名無しさん
09/10/13 19:17:58
LINQ to SQLの中身がわかってない奴が多いのな。
とりあえずDataContext.Logで吐かれるSQLを確認するところから
はじめたらどうだ?


448:デフォルトの名無しさん
09/10/13 20:29:13
ですな。
>>443 のような酷い勘違いは初めて見たけど。

449:デフォルトの名無しさん
09/10/13 20:40:37
LINQ to Objectsを最適化するとしたら,DynamicMethodでインライン展開かなあ
コード生成のコストが高いからあんまり意味なさそう

450:デフォルトの名無しさん
09/10/13 21:37:17
>>446
Whereの条件とかは式ツリーだけど、Where自体は式ツリーでない

>>447-448
まあ、LINQ to SQLで生成されるSQLも大概だがな
作成したクエリ(IQueryable)をそのまま変換してるからサブクエリが深すぎて何が何やら

451:デフォルトの名無しさん
09/10/13 23:25:35
>>446
そう。ただ実行の度に発行される。ToList()すりゃ1回ですむけども。

452:デフォルトの名無しさん
09/10/26 18:34:12
            /)
          ///)   ノ´⌒`ヽ
         /,.=゛''"/γ⌒´      \
  /     i f ,.r='"-‐'つ ""´ ⌒\  )
 /      /   _,.-‐'~  \  /  i )   こまけぇことはいいんだよ!!
   /   ,i   ,二ニ⊃ (・ )` ´( ・) i,/
  /    ノ    il゛フl    (__人_).  |
     ,イ「ト、  ,!,! \   `ー'   /
    / iトヾヽ_/ィ"   `7      〈

453:デフォルトの名無しさん
09/11/07 12:28:38
データは作成する回数よりも参照される回数の方が多いわけで、
キャッシュがないから遅延されても重くなるだけじゃないか?
結局はToList()しまくるハメになっている気がする。

454:デフォルトの名無しさん
09/11/07 13:04:29
SQLはちゃらっと書く分には楽だな。
最適化とか考えてくとだんだんめんどくさくなりそうだけど。

つーかいい加減データアクセスモデルはナイスな奴一つにまとめてくれ。
Oslo?

455:デフォルトの名無しさん
09/11/07 19:58:09
確かにMSは昔からデータアクセスの新方式を乱発しすぎなんだよな。


456:デフォルトの名無しさん
09/11/09 14:02:34
遅延評価も即時評価も都合に合わせて選択できるってことで
今のモデルで悪くないと思うがな。

そもそも本当にチューニングが必要な場所ならLinqは使わないだろ。

性能云々うるさいやつ向けに..Optimize()あたりを追加してみるか?

457:デフォルトの名無しさん
09/11/09 17:37:01
手段がいろいろ用意されて軽く破綻してるC++の二の舞ですね
パラダイムを混ぜこぜにするとよく起こる

458:デフォルトの名無しさん
09/11/10 17:39:44
結局のところ記述性と性能はトレードオフなんだよ

459:デフォルトの名無しさん
09/11/13 00:55:32
え、いや、Linq の遅延評価は記述性って言うか
スケーラビリティ?だべ。要素数がドカーンって
なっても使えるという意味での。

460:デフォルトの名無しさん
09/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
09/11/15 02:16:19
すまん、Concat を見つけた。

foo.SelectMany(i=>bar(i)).Concat(new[]{ item });

と書けた。
でも、配列生成してんのが無駄な気がするが、
回避する方法ないよね?

( new List<T>(){ item } とかは無しでw)

462:デフォルトの名無しさん
09/11/15 03:02:15
() => { yield return item; }

463:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/11/15 11:46:45
>>461
Enumerable.Repeat(item, 1) で回避。

465:デフォルトの名無しさん
09/11/15 12:01:40
拡張メソッドにT使えたっけ?

466:デフォルトの名無しさん
09/11/15 12:17:35
Concat<T>が正解ね

467:デフォルトの名無しさん
09/11/15 16:28:58
>>464
それたぶん配列作った方が効率的
Rangeで作られるイテレータよりも配列のイテレータの方がずっと速いはず

468:467
09/11/15 16:30:40
間違えたRepeatか

469:デフォルトの名無しさん
09/12/11 00:11:22
Linq to Object で List 内のデータを取り出した時に、そのデータを変更することはできるのでしょうか?
Linq to Object では、抽出するだけなのでしょうか?

470:デフォルトの名無しさん
09/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
09/12/11 23:15:10
>>470
ありがとうございます。
LINQ は便利だなぁと(ソートもしてくれるし), PLINQ にもなるし;

抽出した内容を判別して、データを変更できるんだろうなぁと思っていました。



472:デフォルトの名無しさん
09/12/12 14:18:30
ちなみに、標準では Foreach メソッドみたいなのないけど、
それを認めると LINQ 中で副作用起こすのを推奨しちゃうことになるから避けたらしい。

list.Select(x => xxx).Foreach(x => x.Property = xxx);
みたいなのは邪道。
LINQ 中では副作用は起こさないこと推奨。

473:デフォルトの名無しさん
09/12/12 14:47:28
なれていない人って偶に
 int count = 0; var distList = from i in srcList select new { Val=i, Index=++count };
みたいな事をやっちゃうよねw

そういうノウハウってどこかにまとまっていないのだろうか?
MSDNにLINQの使い方ガイドラインってないよね?

474:デフォルトの名無しさん
09/12/12 15:48:41
外部スコープの変数を書き換えるといろいろ副作用が怖いね。
よほど理解して使わないと。

475:デフォルトの名無しさん
09/12/12 18:32:10
副作用?そんな表現はじめて聞いた。
msが言ってるの?

476:デフォルトの名無しさん
09/12/12 18:45:02
一般的な言葉じゃないか?
「ifの中に副作用のある式を書くな」なんて昔から言われているし

477:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/12/13 03:24:35
そりゃそうだろw
何言ってんのw

480:デフォルトの名無しさん
09/12/13 03:41:07
>477
のは気をつけないと忘れてて、あれうごかねぇとかたまにやるw最近は体が覚えてきたが。
>478
うちのバカエンジニアとかでもおなじようなことしてそうでこえぇ。

481:デフォルトの名無しさん
09/12/13 19:31:28
>>479
自分一人ならこういうノウハウもすぐに納得して「そりゃそうだ」で済ませれるが、
仕事でチームでやっていると全員がLINQを理解しているわけじゃないから、そうもいかないのよね。

気がつくと新人がコメントに「//なぜかこのToListを外すとぬるぽ」とか書いてたりするw

482:デフォルトの名無しさん
09/12/14 13:13:04
そんなこと言ってたら新しいことなんもできんやろ
未熟な人間にあわせてどうすんねんw

483:デフォルトの名無しさん
09/12/14 17:16:24
まともな業務アプリの開発だと、LINQでDBアクセスなんてしないから(つーか、したらバカ)
そんなに大して問題にはならない。
クライアントサイドでリスト形式の一時データを参照をする場合になら使える程度だと思う。

484:デフォルトの名無しさん
09/12/14 17:30:49
そうは言ってもLinqなしでEntityFrameworkを使うのはつらいぞ(笑
自分の理解できないものを嫌う気持ちもわからんではないがね。
そういう人はLinq以前にORMも使えないのだろう。

485:デフォルトの名無しさん
09/12/14 22:08:07
>>482
新しい技術を導入したらアホがアホなことをしないように、
実装規約やガイドラインを用意しなきゃならんのよ。辛いことに。


486:デフォルトの名無しさん
09/12/15 06:45:06
LINQ漬けになるとトランザクションを意識しない楽観的な思考になりやすい。
そしてDB更新系で落とし穴に。。。

487:デフォルトの名無しさん
09/12/15 22:32:42
TransactionScope 使えるんだし大丈夫じゃね?

488:デフォルトの名無しさん
10/01/15 22:13:23
・意味不明な所で例外が起こってトラブったら、LINQの遅延評価が原因だったでござる。
・想定外の値が返ってくると思ったら、LINQの遅延評価+キャプチャが原因だったでござる。
・新人が遅延評価+ソースの値の変更を前提としたコードを作っていたでござる
コードの各所に見えない依存関係ができてもうやだ…
自分のコードは副作用のないようにしているが、他人のコードはどこまで追っかけても分からん…

489:デフォルトの名無しさん
10/01/16 01:16:01
.Selectで検索して全部ToList()すれば?w

490:デフォルトの名無しさん
10/01/16 01:49:49
遅延評価前提ってのは別にいいんじゃないの?
後段に更に条件を繋げられるようになるのだから、指針としては悪くない。
キャプチャのほうは本当に注意深くやらなきゃいけないのに、無頓着な人いるよね……

491:デフォルトの名無しさん
10/01/16 10:37:33
チーム規約で、ToList 必須にしちまえば?


492:デフォルトの名無しさん
10/01/16 10:40:55
キャプチャってどういう意味?
わからないから聞いちゃう><

493:デフォルトの名無しさん
10/01/16 14:50:19
頼み方が悪いから教えない

494:デフォルトの名無しさん
10/01/16 14:50:23
クロージャで外のローカル変数を取り込むやつかな
それを利用して長く状態持たせたりすると凶悪

495:デフォルトの名無しさん
10/01/16 14:55:39
それでもGCがなんとかしてくれるんでしょ?
もしかしてunsafeがらみの話?

496:デフォルトの名無しさん
10/01/16 15:05:45
そういう話じゃなくてさ
int i = 0;
otherClass.Items = source..Where(x=>x.Value == i++);
こんなことされるともうどうなるか分からないだろ
OtherClassのItemsの評価回数に依存することになる

497:デフォルトの名無しさん
10/01/16 21:53:13
>>496
いいたいことはわかるが動くコードかこうな。
説得力ないから。

498:デフォルトの名無しさん
10/02/04 18:12:53
すみません、質問です。
LINQには、バージョンはあるのでしょうか?
VS等のバージョンはどんどんとあがっていっていますが、
コードが同じもので動かなくなるかどうかを知りたいです。
例えば、CLRに完全依存の構造なので、CLRバージョンが変わる時に
注意が必要、など

499:デフォルトの名無しさん
10/02/04 20:54:49
基本的に上位互換だから気にしなくていい

500:デフォルトの名無しさん
10/02/05 13:27:50
すみません、質問です。
LINQで更新や削除は行えるのでしょうか?
たとえ行えたとしても、細かい制御が出来ないからADO.NETで
ExecuteNonQuery使った方が楽っていう結論になってたりするのかな?

501:デフォルトの名無しさん
10/02/05 13:29:30
Linq to SQL
Linq to Entity
両方ともORMだから可能。

502:デフォルトの名無しさん
10/02/05 13:52:18
いったんエンティティに読み込むから大域処理には向いてないな。


503:デフォルトの名無しさん
10/02/05 19:05:38
一括更新用の拡張メソッドを作っている人達もいるな。

504:デフォルトの名無しさん
10/02/05 19:26:15
テーブルは第3正規化がされているのが普通だし、多数の表の集合演算が入るから
結局はエンティティと対になるストアドプロシージャを組んでしまう。LINQ気持ち悪い。

505:デフォルトの名無しさん
10/02/05 21:36:19
LINQは排他制御がきちい

506:デフォルトの名無しさん
10/02/07 17:03:06
L2Sは更新がちょっとという人は、DataContext.GetCommand(query).CommandTextで取得した
WHERE句を元にUPDATE句やDELETE句を組み立てて、DataContext.ExecuteCommand()を実行する
ような拡張メソッドを用意するのが良いと思うよ。

そうすれば、更新処理はADO.NETを使ってベタでとかやらずに、トランザクションや排他に
ついてはExecuteNonQueryと同じ考え方で設計出来るから。

っで、それ以上の事をやりたくなったらストアドで。

507:デフォルトの名無しさん
10/02/08 01:17:13
>>506
結局はSQLを書くってこと?LINQの意味なくない?

508:デフォルトの名無しさん
10/02/08 06:55:49
この辺を参考に。
URLリンク(weblogs.asp.net)
URLリンク(www.aneyfamily.com)


509:デフォルトの名無しさん
10/02/13 17:28:02
Distinct重複は取り除けるけど、重複しているものだけを
取り出すには、どうすればいい

510:デフォルトの名無しさん
10/02/13 17:48:11
groupbyしてwhere count>2って感じ。

511:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/13 19:27:29
そこらへんはLINQというよりSQLのセンスだよな。

513:デフォルトの名無しさん
10/02/13 20:55:57
LINQ 初めて使ってみたけどなんか面白いね
ていうか拡張メソッドが面白いのか

514:デフォルトの名無しさん
10/02/13 20:59:49
何も考えずに乱用すると破綻するけどねw

515:デフォルトの名無しさん
10/02/13 21:50:24
基本DBはストアドを呼び出し。もし必要であればEntityの複合型データにLINQ。
という使い分け。テーブルには絶対にLINQでアクセスしない。
MVVMデザインアプローチで組んでいるが、まずLINQの出番はない。

516:デフォルトの名無しさん
10/02/13 21:57:31
Linq to Object は使うわ

517:デフォルトの名無しさん
10/02/13 22:22:07
>>514
やべえ調子に乗って使いまくるところだったww

518:デフォルトの名無しさん
10/02/13 23:04:13
自分は、L2Sに関しては式ツリーからSQLを生成するライブラリだという捉え方。
他のLINQ to ホゲホゲについてはまた別の捉え方だけど。

519:デフォルトの名無しさん
10/02/13 23:06:47
メソッド形式のto Objectsは普通に便利
メソッド形式で使ってる限りはループで書くのに比べて見づらくなることもまず無いし

520:デフォルトの名無しさん
10/02/13 23:16:26
to IQueryableなものとto IEnumerableなものでは考え方は違うわな。

521:デフォルトの名無しさん
10/02/14 00:03:10
LINQはCollectionデータだけを対象にして使う分にはいいね。

522:デフォルトの名無しさん
10/02/14 00:14:49
まぁ大抵の感想はそこにいきつく。
無理にLINQtoSQLを使うことはない。

523:デフォルトの名無しさん
10/02/14 00:24:09
Expressionで処理を構築するっていう考え方は割と好きだけどね-。

524:デフォルトの名無しさん
10/02/14 00:25:34
IEnumerable に ForEach がないのは何でなんだろ

525:デフォルトの名無しさん
10/02/14 00:36:00
>>524
副作用起こす系統はLINQの標準には入れたくなかったんじゃないかと。

526:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/14 00:45:40
>>525-526
なるほどー
>>526
それ作ったw

528:デフォルトの名無しさん
10/02/14 13:40:26
C#って3.0以降は標準化されてないけどするとしたらExpression<T>とかdynamicとかどうするんだろう
激しくランタイムに依存するわけだけど全部言語仕様にハードコードするのかな

529:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/02/15 21:06:51
お前にとっては多分無駄な寄り道だと思うからやめとけば

531:デフォルトの名無しさん
10/02/15 21:09:51
普通に考えてそのまんま移植した方が早い

532:デフォルトの名無しさん
10/02/15 21:38:19
探しまくっても見つからないようなもんが
なんで効率アップに繋がると思うのがよくわからんわ

533:デフォルトの名無しさん
10/02/15 22:07:19
LINQ プロバイダ MySQL でぐぐってわからなかったら無理だからやめておけ

534:デフォルトの名無しさん
10/03/14 22:49:42
xmlはUTF-8だと思っていたけど、XmlDocument.Load(TextReader)
でTextReaderにS-jisエンコードを指定しているコードをみて困惑。
これってどういう意図なんでしょう?

535:デフォルトの名無しさん
10/03/15 02:22:37
ていうかXMLはUTF-8じゃないというか、何だってありだし。
UTF-8固定ならDeclarationにencodingはいらん。

536:デフォルトの名無しさん
10/03/16 00:47:57
まあそういうなよ

537:デフォルトの名無しさん
10/03/18 01:22:17
UTF-8はデフォルトなだけ

538:デフォルトの名無しさん
10/03/30 00:55:11
なんか来てた
Chapter16 LINQとメソッド構文
URLリンク(www.atmarkit.co.jp)

でもこんな概略の説明なんて既に色々あるんだから、もっと深い奴、
例えばLINQの落とし穴とかそういうところを説明したドキュメントがホスィ

539:デフォルトの名無しさん
10/03/30 08:10:45
コアな使い方はブログを見て回ればいいんじゃね?

540:デフォルトの名無しさん
10/03/30 09:38:37
それがマンドクサイのでいろいろとコアなのがまとまってて欲しいのが正直なところ。
いや、そんなことじゃいけないとは思うんだけどね(;´Д`)

541:デフォルトの名無しさん
10/06/05 19:53:02
今更ながらLINQ便利すぎ!
Listに格納したオブジェクトの並べ替えとフィルタが楽すぎて笑った。
並べ替え用のDatatable作ってたりいったい今まで俺は何をやっていたんだろう‥

542:デフォルトの名無しさん
10/06/05 19:57:34
VB脳乙
Listのソートやフィルタは別にLINQやDataTable使わなくても簡単にできる

543:デフォルトの名無しさん
10/06/06 00:08:23
>>542
わざわざそういうクラスを実装した上でLISTを作ればの話だろ?
オブジェクト型のList作って、適当に格納したオブジェクトの対象としたいメンバさえ一致すれば、一行で書けてしまうは凄い。
わかっててやらないと危ういけど‥

544:デフォルトの名無しさん
10/06/06 00:18:40
Listにソートmethodつければ良いだけじゃん

545:デフォルトの名無しさん
10/06/06 01:05:19
List<T>.Sort()
List<T>.Find()
とかないの?使えないの?

546:デフォルトの名無しさん
10/06/06 10:17:56
その二つはVB使いには使い方が理解しづらいメソッドの定番
LINQも同様に高階関数使ってるけどクエリ式で隠してるわけだ

547:デフォルトの名無しさん
10/06/06 13:33:23
拡張メソッド形式のLINQのわかりやすさは異常。

548:デフォルトの名無しさん
10/06/07 00:43:25
>>546
なるほど
まあC#使いでも foreach(){ if(current==target)...}ってやってるやつもいるな。

549:デフォルトの名無しさん
10/06/07 18:47:48
気付いたら>>548スタイルで書こうとしてて拡張メソッドで書き直すことはたまにあるな
あまりにもよく使われるパターンだったから手が覚えてるんだよね

550:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/10 14:35:37
名前空間は?

552:550
10/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
10/06/11 10:16:21
うーん、そもそもCreateQueryってそういう使い方しないのね。
DbDataRecordで受け取るのが一般的なのか。

IQueriableなのに、後からWhereとか追加できない不思議仕様だ。

554:デフォルトの名無しさん
10/06/13 14:12:11
ごちゃごちゃ言わずにソース出せ。

555:デフォルトの名無しさん
10/06/15 15:18:45
これ仕事で使ってる人いる?

556:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/15 20:48:14
大復活って、いやいやw
せめてList<Object>で……。

558:デフォルトの名無しさん
10/06/24 02:06:34
ある2つのフォルダ間で同じファイル名かつ更新日時が新しいものをLINQで取得したいです。
IEqualityComparer<FileInfo>を継承したMyCompareを使ってExceptしたのですがうまくいきません。
GetHashCode()で return 1;など定まった値を返せばうまくいくので、GetHashCode()の実装が悪いのかと思います。
しかし、オブジェクトを一意に特定するためのメソッドなのだからそういった実装は間違っていると思います。

もしかしたら全然勘違いをしているかもしれませんが、どなたか助け舟をいただけませんか?
よろしくお願いします。
ソース:URLリンク(ideone.com)

559:デフォルトの名無しさん
10/06/24 04:14:11
比較する際に内部では、最初にGetHashCodeでハッシュコードを取得して、
それが同じ値であったらEqualsで比較する、という動きをします。
なので、GetHashCodeはobj.FullName.GetHashCode()だけ返せばいいんじゃないのかな?
LastWriteTimeまで算出に含めるから希望通りに動かないのでは、と思ってみる。
あと、FullNameじゃそもそも「ファイル名」じゃなくてフルパスを取っちゃうから絶対に一致しない。

でも、なんというか、その用途にExceptは違う気もします。

560:デフォルトの名無しさん
10/06/24 04:17:39
マルチ質問にマルチ回答かw

561:559
10/06/24 04:24:52
あー、ほんとだ、C#相談室のほうにも同じ質問投げてあったのね。
しかし回答がまるっきり一緒とは……。

562:デフォルトの名無しさん
10/06/24 21:15:15
>>559
return obj.Name.GetHashCode();
でいけました。ありがとうございました。
過疎スレに質問をしてしまったと投稿してから思い、相談室にもマルチポストしてしまいました。
LINQが大好きなのでこのスレを監視している方がいてくださって嬉しいです。

563:デフォルトの名無しさん
10/06/24 21:22:28
ところで相談室でも言われたのですが、Exceptを使うのは変でしょうか?
私は差集合で解決できる問題なのかなと素直に思いましたが。
単純にファイルの有無ならば差集合でとれる。
→Equalになる条件が違う
→ならばその条件を指定してやればいい
という段階を踏んでこのソースの形に.なりました。

564:デフォルトの名無しさん
10/06/24 21:32:30
差集合の意味わかってるか?

565:デフォルトの名無しさん
10/06/24 21:35:41
積集合だな
だからってIntersectを使うのも不適切だと思う

566:デフォルトの名無しさん
10/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:名無しさん@そうだ選挙に行こう
10/07/11 04:57:51
>>550

つ ObjectContext.Translate<TEntity>

568:デフォルトの名無しさん
10/11/10 22:58:06
1から見てきたが使いたくなるようなコードがひとつもない
しかも直感でわかりにくい

569:デフォルトの名無しさん
10/11/10 23:24:39
>>568
つ関数型言語

570:デフォルトの名無しさん
10/12/14 07:21:36
ORマッパーになると聞いたが
具体的にどんなふうになるのん?

571:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/12/14 22:52:23
>>571
S2Daoとかなら簡単なSQLなら自動生成してくれるのに今更って感じだな

573:デフォルトの名無しさん
10/12/14 23:10:17
S2DAO(笑)

574:デフォルトの名無しさん
10/12/14 23:30:48
>>571

JOINとかどうするのだろうかとふっと思った

575:デフォルトの名無しさん
10/12/14 23:47:23
>>574
もちろん出来る
URLリンク(msdn.microsoft.com)

576:デフォルトの名無しさん
10/12/15 00:45:15
>572
えーと自動生成してくれるんだが・・・


577:デフォルトの名無しさん
10/12/20 13:47:54
joSQLじゃ何故流行らない?

578:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/01/27 18:31:19
それはLinq to なに?

580:578
11/01/27 21:54:36
多分Linq to SQLです
何故「多分」かと言うと、Entityとの違いがわからんからです
DBはSQL Server2005です

581:デフォルトの名無しさん
11/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
11/01/28 00:04:25
途中で送ってしもた

例えばDB上でTableA,Bが上記のような場合、LEFT JOINしたらResultのようになるが、
これを(string, string, int)に入れようとすればエラーになって当然

とりあえず、匿名クラスを(string, string, int?)にすれば良い

583:578
11/01/28 14:49:37
>>582
ありがとうございます
ところでselect匿名型で型指定するにはどう書けば良いでしょうか?

584:デフォルトの名無しさん
11/01/28 18:22:36
>>583
キャスト。
new{ Hoge = (int?)x } みたいに。

585:578
11/01/28 19:42:25
>>584
ありがとうございました
無事できました

586:デフォルトの名無しさん
11/02/08 22:46:26
Linqでクロス集計とかできますかぁ?

587:デフォルトの名無しさん
11/02/08 22:54:17
まあ、そりゃ、ODBCとExcelだのAccessだのでやれてたことはたいていLINQで簡単に書ける。

588:デフォルトの名無しさん
11/02/18 23:37:45
URLリンク(www.g1sys.co.jp)
にあるような複雑な消費税計算もLINQなら余裕ですよね?



589:デフォルトの名無しさん
11/02/19 03:20:21
向こうで馬鹿にされたからってこっち荒らすなよ

590:デフォルトの名無しさん
11/03/25 21:47:03.67
LINQ to DataSet良いね。
DataTable(DataViewだっけ?)のソート機能はいまいちわからない。

591:デフォルトの名無しさん
11/03/25 21:52:20.02
LINQは禁止だけどDataTable.SelectはOKって意味が分からんよな

592:デフォルトの名無しさん
11/03/25 21:56:40.88
>>591
そんなイミフな規約があるとはかわいそうに

593:デフォルトの名無しさん
11/03/26 09:15:06.03
>591-592
.NET Framework 2.0を切れない環境とか。
工場なんかだと今だにWin2K使ってたりするしなあ。馬鹿げた話だ。


594:デフォルトの名無しさん
11/03/26 09:58:37.70
禁止といったら使えるのに使わせないということだと思ったけど
.NET 2だったら元より使えないじゃない

595:デフォルトの名無しさん
11/03/26 10:11:54.06
件のプロジェクトは3.5だよ
なお除外申請をすればLINQは使えるけど拡張メソッドは全面禁止の模様

596:デフォルトの名無しさん
11/03/26 10:33:29.03
VBならいけるけど組み込みクエリ演算子の少ないC#では何もできないなそれ

597:デフォルトの名無しさん
11/03/27 02:01:44.67
拡張メソッドを普通に呼び出すのもダメなのか?

598:デフォルトの名無しさん
11/03/27 08:09:14.06
分からん
規約の最後の「以下は使用を禁止する」ってリストに「拡張メソッド」「ラムダ式」「LINQ」って書いてあって、
下二つは申請すれば使えるって注釈があった
多分ユーザーに直接聞けば普通にOKされるとは思うが、リーダーと元請が事なかれ主義で申請を弾くんじゃないかと思う
最悪後出しで吊し上げられる可能性もあるから確認する気にもならん

599:デフォルトの名無しさん
11/03/27 08:28:01.17
拡張メソッドを自分で作るなってことじゃないのか?

600:デフォルトの名無しさん
11/03/27 12:02:56.77
成果物のソースコードやライブラリを.NET2.0環境でも流用したいとかじゃないの?


601:デフォルトの名無しさん
11/03/27 12:21:50.11
あそこがそんなまともな発想で動くはずがない
同じ規約に「stringは参照型だからconstじゃなくてstatic readonlyにしろ」って書いてあるんだぞ?
FxCopで何十個も警告出てみんな間違いだってわかってるのに、客がドヤ顔で提示してくるから誰も突っ込まないし

602:デフォルトの名無しさん
11/03/27 12:25:59.03
理由は間違ってるがその規約自体は必ずしも間違ってないぞ
privateやinternalならいいが、アセンブリの外から見えるconst定数は
バージョン管理上問題があるので非推奨

603:デフォルトの名無しさん
11/03/27 12:38:29.25
>602
そういう意味ならstatic readonlyでもダメだろ


604:デフォルトの名無しさん
11/03/27 12:48:55.51
>>602
もちろんprivateの話

>>603
ビルド時に解決されるかどうかの違いだろ

605:デフォルトの名無しさん
11/03/27 13:17:12.35
メモリの節約が目的なのかな?
実際にはインターンされるから節約できるのは 文字列のサイズ×参照元のアセンブリの数 くらいかw

606:デフォルトの名無しさん
11/03/27 13:45:11.34
.NETやらC#やらを使ってて「メモリの節約が~」とか片腹痛いよね
馬鹿みたいな要求はそういう小手先だけの最適化()から出てくることが多かったり

607:デフォルトの名無しさん
11/03/31 14:49:08.10
LINQは糞

608:デフォルトの名無しさん
11/04/02 21:40:07.08
可読性が著しく悪化する

609:デフォルトの名無しさん
11/04/07 22:52:52.61
SQLとかXML使わない人にはLINQって無用?

610:デフォルトの名無しさん
11/04/07 22:57:19.29
コレクションも配列もIEnumerable<T>も使わないなら無用

611: 忍法帖【Lv=10,xxxPT】
11/04/08 00:35:23.25
じゃあ必要じゃないか!

612:デフォルトの名無しさん
11/04/08 01:19:05.23
えっ

613: 【東電 78.9 %】
11/04/08 22:51:39.37
バイバイ
さよおなら
あーりがとー

614:デフォルトの名無しさん
11/04/08 23:54:00.10
あんたー
行かないでー

615:デフォルトの名無しさん
11/05/16 14:59:59.72
おまえらの持ってるLINQの良書ってなんですか?
自分はオライリーのクックブック(LINQは30ページほど)しか持ってないから参考にしたい。

616:デフォルトの名無しさん
11/05/18 17:03:55.24
MS公式解説書シリーズから自分に適した方を選ぶといい。
プログラミングMicrosoft LINQ
LINQテクノロジ入門 >>197-198

617:デフォルトの名無しさん
11/05/18 19:19:33.39
LINQテクノロジ入門はないな。

618:デフォルトの名無しさん
11/06/02 19:50:13.55
マイクロソフトさん、無敵のC#でエディットコンティニュなんとかしてくださいよォ

619:デフォルトの名無しさん
11/06/04 10:32:14.82
LINQが素晴らしすぎて
もう他の言語では開発する気が起きない身体になってしまいました
javaがforを回しているのを見るだけで不整脈になります
Microsoftはどう責任をとるつもりですか?

620:デフォルトの名無しさん
11/06/04 12:53:35.38
よし、じゃあ、J# 復活させろって要望を出しまくるんだ!

621:デフォルトの名無しさん
11/06/04 18:17:29.27
from i in Enumerable.Range(1,10) ... までやっちゃう奴もいるが、
世の中には適材適所って言葉がだなw

622:デフォルトの名無しさん
11/06/04 23:25:36.07
F#のほうがいいお(´・ω・`)

623:デフォルトの名無しさん
11/06/05 00:01:06.96
javaとか滅亡すればいいのに

624:デフォルトの名無しさん
11/06/05 01:42:03.34
LINQ(の出来ること)に限ってはScalaやF#よりC#のほうがいいな。

625:デフォルトの名無しさん
11/06/05 02:02:23.62
F#つかってるけどLINQは全く使わんな。
DBとかつかうんならまた話は別なんだが、おbじぇctとXMLはつかわんでいい。

626:デフォルトの名無しさん
11/06/05 02:14:45.27
>>625
ObjectsはSeqがあるから使わないのは当然だと思うけど
XMLのほうはLinq to Xml使わなくてどうするの?

627:デフォルトの名無しさん
11/06/05 09:55:46.24
XMLはElementとかAttributeとるラッパーかましたりSeq化したり。
SQLはクエリーにしないといけないのでそういうわけにはいかんけど。
まぁF#でもうちっとLinqがきれいに書ければいいんだけどね。TypeProvider来たらもう少し変わるんか?

628:デフォルトの名無しさん
11/06/05 11:58:43.36
XPathかと思ったら・・・

629:デフォルトの名無しさん
11/06/06 07:34:52.23
Xquery

630:デフォルトの名無しさん
11/06/09 23:12:42.43
あれ?LINQ2SQLだとインデックス使ってくれないとかある?
さっきざっくり見た時にvarcharをncarcharに変換するので引っかからないうんたらとか書いてるもあったような気がしたんだが。

631:デフォルトの名無しさん
11/06/09 23:21:51.44
そんなもんスキーマと検索条件次第だろ
自分でDataContext.Log設定して実行計画確認しろよ

632:デフォルトの名無しさん
11/06/10 00:45:13.06
Logみれというのはごもっともなんだが、明らかにインデックスのはってある絡むだけをwhereで使ってんないんだよね・・・
ちなみにちょと違うかもしれんがこんなのあった。
URLリンク(social.msdn.microsoft.com)

633:デフォルトの名無しさん
11/06/11 07:50:22.35


634:デフォルトの名無しさん
11/06/26 21:45:11.58
まじっすか!!!

635:デフォルトの名無しさん
11/06/28 13:00:23.68
複数のテーブルが複数のsdf(SQL Server Compact)ファイルに分散して格納されています。
#テーブル1,2はファイル1、テーブル3,4,5はファイル2など。

このような場合でもLinq to Entitiesで全てのテーブルを連携した検索等を行うことは可能でしょうか?

Linq自体これから勉強するところなのですが、仕様を先に決めなければなりません。
ご教示よろしくお願いします。

636:デフォルトの名無しさん
11/06/28 13:09:40.13
>>635
コードの見た目上は連携したように見えるものは書けると思うけど、
sdf ファイルごとにそれぞれ個別のクエリが動くと思う。

637:デフォルトの名無しさん
11/06/28 21:01:46.09
SelectedItems
Item
Count

SelectedIndices
Item

上記はそれぞれどのような機能を果たすのですか?その機能を教えてほしいです。
初心者で申し訳ありません。

638:デフォルトの名無しさん
11/06/29 00:47:53.20
>>636
レスありがとうございます。
EDM(Entity Data Model)を作るときに工夫すれば出来そうですね。
個別のクエリが動くのは目を瞑ることにします。

639:デフォルトの名無しさん
11/06/29 02:54:06.93
Linq2SqlとLinq2Entityってざっくり何が違うん(´・ω・`)

640:デフォルトの名無しさん
11/06/29 08:46:14.33
>>639
そもそも開発チームが違う。
LINQ to SQL は言語チームが IQueryable 版 LINQ の参考実装として作ったもの。
LINQ to Entities は ADO.NET チームが作った、ちゃんとした DB アクセスライブラリ。

当然、参考実装が今後保守されるわけがなく。

641:デフォルトの名無しさん
11/06/29 09:28:45.92
なるー。
で聞きたいのはEntityFrameworkを使ってこれから幸せになれるかなんだが…
まっとーなプロジェクトで使ってる人とかおるん?

642:デフォルトの名無しさん
11/06/29 09:33:23.62
最近、というか、.NET 4世代になってようやく採用増えてるんじゃないな。

643:デフォルトの名無しさん
11/06/30 00:31:39.64
これは良いスレ。
計測データの収集と抽出にDB使おうと考えてた。


644:天使 ◆uL5esZLBSE
11/07/01 20:33:00.14
>>638
ハアァァァァアァァァァァァァァアアァ????
なるほどゴミなわけだ


645:デフォルトの名無しさん
11/07/04 00:35:22.65
LINQtoSQLはなんだかんだでNET4でもサポートされてる。
なくなるような懸念されてたけどどうもそんな感じではない。

646:デフォルトの名無しさん
11/07/04 00:39:45.53
WP7でLinq to Sqlが乗っかってるから、それ自体がなくなるってのはもうないねー。

647:デフォルトの名無しさん
11/07/06 09:51:37.05
いまいちわからん。

もともとDBに任せてた SELECT とかの処理をクライアント側でやるってこと?だよね?
テーブルのデータを全部クライアントに持ってくるの?


648:デフォルトの名無しさん
11/07/06 10:41:45.19
言葉の意味はよく分からんがとにかくすごい勘違いだ

649:デフォルトの名無しさん
11/07/06 13:36:20.66
テーブル HOGE に 100 件中 10 件のデータの項目A が 10以下だったとして
その10件のデータに対してループ処理をしたいとき

LINQってまずDBから100件データ取ってきてコード内で指定された条件の10件分だけ選別してループするんじゃないの?

それともSQLを自動生成して必要分だけ取ってきてくれるの?

あれなんか根本的に間違ってる?

650:デフォルトの名無しさん
11/07/06 14:15:04.78
オブジェクトでSQLライクな操作を可能にしたのがLINQだろ

651:デフォルトの名無しさん
11/07/06 16:10:54.32
>>647
全然違う。

LINQ to SQL とか LINQ to Entties は、
クエリ式とか db.Select(x => ...) みたいなメソッド呼び出しから、
式ツリー作って、その式ツリーから SQL 文組み立てて
DB サーバーに問い合わせ行う。

652:デフォルトの名無しさん
11/07/06 16:41:34.63
>>649
まずはLINQ to ObjectとLINQ to SQLの違いを勉強してから来い

653:デフォルトの名無しさん
11/07/06 21:35:56.48
詳しくない人は、IQueryableについて調べてから出直してください。

654:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/07/08 01:21:39.32
クエリ式じゃないけど
rows.OrderBy(e => e.value).GroupBy(e => e.group).Select(e=>e.First());
これでいけるが、groupってプロパティ名は・・・

656:デフォルトの名無しさん
11/07/08 01:41:10.34
rows.GroupBy(x => x.group).Select(y => y.Min(z => z.value))
groupよりvalueがイヤだ

657:デフォルトの名無しさん
11/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
11/07/09 00:03:39.81
ありがとうございます。

やっぱり出来たんですね。
それぞれの方法で動作を確認しました。

あのプロパティ名は、ここに書くためにわかりやすそうなのを適当につけただけなので。
ご心配には及びません。w 余計な心配をさせてしまったみたいで、すみません。

659:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/07/19 15:16:43.87
それは具体的にどういうルールなんだ
その例だけだとたくさんアプローチがあるんだが

661:デフォルトの名無しさん
11/07/19 15:28:28.71
0~4までのグループ1は降順で、5~9までのグループ2は昇順で、
グループ2→グループ1の順に並べたいです。

662:デフォルトの名無しさん
11/07/19 15:47:10.41
グループ分けは数値の大きさで決定?配列内での位置で決定?

663:デフォルトの名無しさん
11/07/19 15:47:48.84
エスパーさんの御指名でしたか

664:デフォルトの名無しさん
11/07/19 15:48:45.38
数値の大きさです。


665:デフォルトの名無しさん
11/07/19 15:53:57.02
from i in ia
orderby i < 5 ? -i : i
orderby i < 5 ? 1 : 0
select i

666:デフォルトの名無しさん
11/07/19 16:00:37.66
おぉ、OrderByは2つ繋げてもいいんだ。?って初めて見た。
調べます。ありがとうございました。

667:デフォルトの名無しさん
11/07/19 16:04:18.40
?は三項演算子、:とセット
プログラム書いてる人なら初めてってこたないと思うが
まあ誰にでも最初はあるか

668:デフォルトの名無しさん
11/07/20 02:11:33.40
LINQ始めたてでよくわかってないんですが、C#の場合
var q = array.Where(x => x <= 4).Select(x => x);
配列から4以下の数値を、取り出す文の場合なんでWhereとSelectの中になんでラムダ式が入っているんですか?
それとxという変数っぽいのはなんなんですか?

669:デフォルトの名無しさん
11/07/20 02:35:06.43
Whereならラムダ式でtrueになったものだけひっかけてくれる。
xはWhereのなかなどでラムダ式が呼び出される時にアイテムがセットされる。

670:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/07/20 19:13:40.41
>>668
URLリンク(www.atmarkit.co.jp)
↑これのFigure 9。

x はラムダ式(匿名関数)の引数。

672:デフォルトの名無しさん
11/08/03 06:46:39.84
>>670
Selectの有無でqの戻り値が変わることもあるよ

673:デフォルトの名無しさん
11/08/03 11:18:41.76
え?まじで?どういう場合に?

674:デフォルトの名無しさん
11/08/03 19:11:17.24
戻り値は変わらないのでは?
しいてそういうケースを考えるなら
ただの配列に.Select(x => x)だけを足したりなどをすると、
得られる結果は一見同じだけど
型が厳密なIEnumerable<T>に変わるのと、
当然Selectを通るのでパフォーマンスは落ちる。
ただ、今回の場合は前段階にWhereが挟まれているので、何も変わらないね。

675:デフォルトの名無しさん
11/08/03 20:44:38.31
WhereのイテレータがSelectのイテレータに変わるから全く何も変わらないわけでもない
全く意味のない違いだけど

676:デフォルトの名無しさん
11/08/03 21:40:50.63
まあ、ReferenceEqualsでもしない限りは。
普通しないと思うし。

677:デフォルトの名無しさん
11/08/08 01:02:05.32
皆型までみないのか。

678:デフォルトの名無しさん
11/08/08 01:26:27.26
LINQはインターフェイス中心だしね。

679:デフォルトの名無しさん
11/08/08 19:29:01.07
DataTableをSELECTして匿名型になると元に戻すのが大変なんよー

680:デフォルトの名無しさん
11/08/14 00:44:37.92
先生早く来ないかな

681:デフォルトの名無しさん
11/09/04 02:37:18.36
>>674
> ただの配列に.Select(x => x)だけを足したりなどをすると、
> 得られる結果は一見同じだけど
> 型が厳密なIEnumerable<T>に変わるのと

厳密なってどういう意味だ?
IEnumerable<T>の派生型である配列からIEnumerable<T>へと抽象化されるんだが…

682:デフォルトの名無しさん
11/09/04 02:50:26.04
ああ、すまん、>>675って意味か…

683:デフォルトの名無しさん
11/09/06 13:26:26.01
現在 asp.netで開発しております。
初心者です。
下記のようなXMLファイルを八百屋のIDを条件に
果物、野菜、缶詰の在庫の判定を行いたいのですが、
うまくいきません。
ご教示ください。
XMLの読み込みはLinqを使用しています。

684:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/09/06 13:32:18.03
<設定内容>
<八百屋 ID="001">
<果物>
<リンゴ 在庫="YES"/>
<みかん 在庫="YES"/>
<メロン 在庫="NO"/>
</果物>
<野菜>
<大根 在庫="NO">
<白菜 在庫="YES">
</野菜>
<缶詰>
<桃 在庫="NO">
<みかん 在庫="YES">
</缶詰>
</八百屋>

</設定内容>

686:デフォルトの名無しさん
11/09/06 20:24:12.34
こっちが聞きたいわ
「八百屋のIDを条件に」「在庫の判定」の具体的な条件は?

687:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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
11/09/09 12:38:38.00
>>690
すみませんターゲットはSQLServer2005でした
でもこれでできそうなのでやってみます
ありがとうございました

692:デフォルトの名無しさん
11/09/10 03:26:25.43
学校の宿題であることを願うばかりだ・・・

693:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/09/18 13:26:40.48
seq.Count()だろ
でも一つ含まれてればいいんだから if (seq.Any()) の方がいい
一行で書くなら
int? max = data.Where(e=>条件).Select(e=>(int?)e).DefaultIfEmpty().Max();
かな

696:デフォルトの名無しさん
11/09/22 05:59:38.55
>>695
了解

697: 忍法帖【Lv=8,xxxP】
11/11/10 08:11:23.35
a

698:デフォルトの名無しさん
12/01/19 20:38:38.84
linqでcsvファイルを二次元配列に読み込むこと出来ますか?

699:デフォルトの名無しさん
12/01/19 23:41:37.84
出来ますん

700:デフォルトの名無しさん
12/01/19 23:45:40.19
LINQ使うなら二次元配列はすごく相性悪いから捨てろ(そうでなくても多次元配列は終わってるから使うな)
配列の配列を使うことにして、エスケープとか考えないなら
string[][] csv = File.ReadLines("hoge.csv").Select(line=>line.Split(",").ToArray()).ToArray();

701:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/01/20 05:04:41.12
↑ ちなみに str は読み込むCSVのファイル名を入れた変数

703:デフォルトの名無しさん
12/01/20 08:08:43.31
URLリンク(www.codeproject.com)

704:デフォルトの名無しさん
12/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
12/01/27 14:15:34.18
すみません自己解決しました
var result = collection.SelectMany(i => Enumerable.Repeat(i, i));

706:デフォルトの名無しさん
12/02/09 12:15:10.64
LINQでループ処理
何得ですね。
Enumerable.Range(0,length).All(i =>
{
dosomething(i);
return true;
});

707:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/02/24 22:06:01.26
アイドルが同じ名前を使ってるけど、
これって、商標権的にどうなの?
URLリンク(ja.wikipedia.org)

709:デフォルトの名無しさん
12/02/25 02:33:39.10
LISPとかもいましたし


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch