[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 10/10 23:29 / Filesize : 217 KB / Number-of Response : 788
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/02/09(土) 23:51:34 ]
VisualStudio2008より追加された便利で強力な機能

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

ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。


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

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


448 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 20:29:13 ]
ですな。
>>443 のような酷い勘違いは初めて見たけど。

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

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

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

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

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

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

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

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



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


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

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

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

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

458 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:39:44 ]
結局のところ記述性と性能はトレードオフなんだよ

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

460 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 02:05:16 ]
SelectMany の戻り値に一つだけ要素を足したいです。

今は、
var list = new List<T>();
list.Add(item);
list.AddRange(foo.SelectMany(i => bar(i)));
のように書いてますが、なんか
冗長な気がします。

1個要素を足すためだけに List のインスタンスを
生成するのは無駄な気がするんですが、
避ける方法ないでしょうか?

461 名前:460 mailto:sage [2009/11/15(日) 02:16:19 ]
すまん、Concat を見つけた。

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

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

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

462 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 03:02:15 ]
() => { yield return item; }

463 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 10:18:15 ]
ラムダ内をイテレーターブロックにはできないよ。
やるなら、拡張メソッド追加して、

public static IEnumerable<T> Concat(this T x, IEnumerable<T> list)
{
yield return x; foreach(var i in list) yield return i;
}
public static IEnumerable<T> Concat(this IEnumerable<T> list, T x)
{
foreach(var i in list) yield return i; yield return x;
}


464 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:46:45 ]
>>461
Enumerable.Repeat(item, 1) で回避。



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

466 名前:デフォルトの名無しさん [2009/11/15(日) 12:17:35 ]
Concat<T>が正解ね

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

468 名前:467 mailto:sage [2009/11/15(日) 16:30:40 ]
間違えたRepeatか

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

470 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 00:17:14 ]
>>469
List 自体の更新?
LINQ 以前に、GetEnumerator で列挙してる最中にリストのアップデートかけちゃダメ。

list[i] = xxx; 的なことがしたいって場合も、GetEnumerator じゃ無理。

list[i].Property = xxx; 的なことなら、
foreach (var x in list.Select(xxx)) x.Property = xxx; で可能。


471 名前:469 mailto:sage [2009/12/11(金) 23:15:10 ]
>>470
ありがとうございます。
LINQ は便利だなぁと(ソートもしてくれるし), PLINQ にもなるし;

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



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

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

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

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

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



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

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

477 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 18:50:51 ]
Linqというよりそこで使われてる静的クロージャの問題。
.NET2.0でクロージャが実装されたとき有名になったプログラム。
i, j がどんな値になるか想像つく?
using System;
using System.Collections.Generic;
delegate void F();
class Test {
  static void Main() {
    List<F> actionList = new List<F>(); 
    for(int i = 0; i < 10; ++i) {
      int j = i;
     actionList.Add(delegate(){Console.WriteLine("i={0}, j={1}",i, j);}); 
    }
    foreach (F f in actionList) f();
  }
}


478 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 20:20:23 ]
LINQの副作用関連でのエンバグは、>>477以外に遅延評価に原因しているものもあると思う
標準的な使い方である「LINQ中でselect new」すら副作用のある式なわけで
(戻り値を使う場所も含め)ちゃんとその挙動まで把握しないと不味い。

var hoges = from p in hoge select new Hoge(p);
foreach(var hoge in hoges) { hoge.ValueChanged += Hoge_OnValueChanged(); }
foreach(var hoge in hoges) { hoge.Value = 3; } // Hoge_OnValueChanged………?

そこまで考慮している保証のないクラスや関数に
値を渡す/返す場合は常にToArray/ToListするのが正解か

479 名前:デフォルトの名無しさん [2009/12/13(日) 03:24:35 ]
そりゃそうだろw
何言ってんのw

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

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

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

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

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

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



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


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

487 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:32:42 ]
TransactionScope 使えるんだし大丈夫じゃね?

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

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

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

491 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 10:37:33 ]
チーム規約で、ToList 必須にしちまえば?


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

493 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 14:50:19 ]
頼み方が悪いから教えない

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



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

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

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

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

499 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 20:54:49 ]
基本的に上位互換だから気にしなくていい

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

501 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 13:29:30 ]
Linq to SQL
Linq to Entity
両方ともORMだから可能。

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


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

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



505 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 21:36:19 ]
LINQは排他制御がきちい

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

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

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

507 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:17:13 ]
>>506
結局はSQLを書くってこと?LINQの意味なくない?

508 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 06:55:49 ]
この辺を参考に。
ttp://weblogs.asp.net/jeffreyzhao/archive/2008/03/06/linq-to-sql-extension-batch-deletion-by-lambda-expression.aspx
ttp://www.aneyfamily.com/terryandann/post/2008/04/Batch-Updates-and-Deletes-with-LINQ-to-SQL.aspx


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

510 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 17:48:11 ]
groupbyしてwhere count>2って感じ。

511 名前:デフォルトの名無しさん [2010/02/13(土) 18:48:06 ]
>>510 サンクス

int[] numbers = { 5, 4, 1, 3, 9, 5, 8, 4, 6, 7, 2, 5, 0 };
var Nums = numbers.GroupBy(num => num).Where(num => num.Count() >= 2);
foreach (var x in Nums)
  Console.WriteLine("{0}:{1}",x.Key,x.Count());


512 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 19:27:29 ]
そこらへんはLINQというよりSQLのセンスだよな。

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

514 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 20:59:49 ]
何も考えずに乱用すると破綻するけどねw



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

516 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 21:57:31 ]
Linq to Object は使うわ

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

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

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

520 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 23:16:26 ]
to IQueryableなものとto IEnumerableなものでは考え方は違うわな。

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

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

523 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:24:09 ]
Expressionで処理を構築するっていう考え方は割と好きだけどね−。

524 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:25:34 ]
IEnumerable に ForEach がないのは何でなんだろ



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

526 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:36:11 ]
>>524
>>472

まぁそれでも作ろうと思えば
public static void Foreach(this IEnumerable<T> source, Action<T> callback) { foreach(var i in source) callback(i); }
簡単に自作できちゃうが。

527 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 00:45:40 ]
>>525-526
なるほどー
>>526
それ作ったw

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

529 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:27:09 ]
お邪魔します。
実はわりと短期間でACCESS+MySQLで作ったアプリを少し拡張して
VB.NET2008 Expressに移植しないといけないのです。

ACCESS VBAでO/Rマッピングもどきを自作で実装していたのですが、
コーディング効率アップのためにLINQの採用を検討しています。

・単純に、"ODBC経由でMySQLにつないでテーブルから任意のカラムを取ってくる"
 というサンプルソースか手順リストがどこかにありませんでしょうか?
 ネットで探しまくっているのですが、LINQ布教用のXMLやら配列やらへの
 クエリのサンプルは見つかっても、実用的なMySQL/ODBCへの接続宣言を
 どうするのかが見つからないのです。

・LINQの習得にADO.NETの知識は必須でしょうか?
 DAO、ADOときて、これ以上、知識の習得に無駄な寄り道は出来れば
 避けたいのですが。

みなさん、よろしくお願いします。

530 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:06:51 ]
お前にとっては多分無駄な寄り道だと思うからやめとけば

531 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:09:51 ]
普通に考えてそのまんま移植した方が早い

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

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

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



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

536 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:47:57 ]
まあそういうなよ

537 名前:デフォルトの名無しさん [2010/03/18(木) 01:22:17 ]
UTF-8はデフォルトなだけ

538 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 00:55:11 ]
なんか来てた
Chapter16 LINQとメソッド構文
ttp://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_16/extremecs_16_01.html

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

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

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

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

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

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

544 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 00:18:40 ]
Listにソートmethodつければ良いだけじゃん



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

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

547 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:33:23 ]
拡張メソッド形式のLINQのわかりやすさは異常。

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

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

550 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 07:41:28 ]
C#, EF4で、ちょっとハマったので質問させてくれ。
DbContextというのがedmxで定義されたコンテキスト、Hogeというのがedmxで定義されたエンティティ型で、
Piyoがedmxとは関係ないクラスだとする。

「DbContext.Hoge.Select(x => new Piyo() { A = x.A, B = x.B })」

みたいな書き方は普通にできて、普通にIQueriable<Piyo>(実体はObjectQuery<Piyo>)が返ってくるよね。
CreateQueryを使って同じようなことがしたいとき(つまりObjectQuery<Piyo>がほしいとき)
どうすればいいんだろう?

「DbContext.CreateQuery<Piyo>("SELECT VALUE Piyo (x.A, x.B) FROM Hoge AS x")」

こう書くと、「Piyoなんて型見つからない」って怒られるし、かといってE-SQL内でVALUE Piyoを
指定しないと「MaterializedDataRecordからPiyoに変換できない」と怒られるし(当然だけど)。

551 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:35:37 ]
名前空間は?

552 名前:550 mailto:sage [2010/06/10(木) 15:29:40 ]
>>551
Hogeは、型はMyApp.Data.Hoge。EdmEntityTypeAttributeでは「DataModel」が名前空間になってる。
「DataEntities」がエンティティセットの名前空間。
PiyoはMyApp.Something.Piyo。コンストラクタに二つの引数がある。

これを踏まえて
「DbContext.CreateQuery<Piyo>("SELECT VALUE MyApp.Something.Piyo (x.A, x.B) FROM DataEntities.Hoge AS x")」
としてみたけど、だめだった。

553 名前:550 mailto:sage [2010/06/11(金) 10:16:21 ]
うーん、そもそもCreateQueryってそういう使い方しないのね。
DbDataRecordで受け取るのが一般的なのか。

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

554 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:12:11 ]
ごちゃごちゃ言わずにソース出せ。



555 名前:デフォルトの名無しさん [2010/06/15(火) 15:18:45 ]
これ仕事で使ってる人いる?

556 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:29:00 ]
OfType()のおかげでArrayListが大復活。

var al = new ArrayList();
al.Add(1);
al.Add(2);
al.Add(3);
al.Add(1D);
al.Add(2D);
al.Add(3D);

var q = al.OfType<double>().Where(n => n >= 2.0);


557 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 20:48:14 ]
大復活って、いやいやw
せめてList<Object>で……。

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

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

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

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

560 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 04:17:39 ]
マルチ質問にマルチ回答かw

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

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

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

564 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:32:30 ]
差集合の意味わかってるか?



565 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 21:35:41 ]
積集合だな
だからってIntersectを使うのも不適切だと思う

566 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 22:38:18 ]
ああ、ごめんなさい。
もともとの質問がGetHashCode()の使い方についてでしたので、説明不足な点がありました。
実装したい機能は、AのフォルダからBのフォルダにファイルをコピーするというものです。
コピーする対象は、AにあってBにないファイルです。
この時点で私はExceptを採用しました。
その後で、実は同じファイルがあっても更新日付が新しかったら上書きコピーするという仕様になりました。
SQLでかくと
SELECT * FROM TableA A
WHERE NOT EXISTS
(SELECT * FROM TableB B WHERE A.Name = B.Name AND A.LastWriteDate <= B.LastWriteDate)
こんな感じになると思います。

これって差集合と違います?

567 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 04:57:51 ]
>>550

つ ObjectContext.Translate<TEntity>

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

569 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 23:24:39 ]
>>568
つ関数型言語

570 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 07:21:36 ]
ORマッパーになると聞いたが
具体的にどんなふうになるのん?

571 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 20:57:11 ]
>>570
1.エンティティを定義
[Table]
public class Table1
{
  [Column(IsPrimaryKey=true)]
  pubic int Key{ get; set; }
  [Column]
  pubic string Column2{ get; set; }
  [Column]
  pubic string Column3{ get; set; }
}

2.DataContextを定義
public TestContext :DataContext
{
  public TestContext (string connectionString):base(connectionString){}
  public Table<Table1> Table1;
}

2. DataContextをインスタンス化してLINQでアクセス
var dc = new TestContext (接続文字列);
var list = dc.Table1.Where(row=>row.Column2=="test").OrderBy(row=>row.Column2).ToList();

572 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 22:52:23 ]
>>571
S2Daoとかなら簡単なSQLなら自動生成してくれるのに今更って感じだな

573 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:10:17 ]
S2DAO(笑)

574 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:30:48 ]
>>571
d
JOINとかどうするのだろうかとふっと思った



575 名前:デフォルトの名無しさん mailto:sage [2010/12/14(火) 23:47:23 ]
>>574
もちろん出来る
msdn.microsoft.com/ja-jp/library/bb399397.aspx

576 名前:デフォルトの名無しさん mailto:sage [2010/12/15(水) 00:45:15 ]
>572
えーと自動生成してくれるんだが・・・


577 名前:デフォルトの名無しさん mailto:sage [2010/12/20(月) 13:47:54 ]
joSQLじゃ何故流行らない?

578 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 16:14:48 ]
ちょっと困ってるので質問
TableA:
 Key1 string
 Key2 string
TableB:
 Key1 string
 Key2 string
 Key3 int

この2つのTableをleft joinさせる
var q=from n in TableA join m in TableB on new {n.Key1,n.Key2} equals new {m.Key1,m.Key2} into z
    from a in z.DefaultIfEmpty()
    select new {n.Key1,n.Key2,a.Key3};

そうするとforeachの段階で「a.Key3がnull許容型じゃない」と怒られる
複合キーだからnull許容には出来ないし、そもそもDefaultIfEmpty()って値型はデフォルトの値入れてくれるんじゃないのかと
これってどうすれば?

579 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 18:31:19 ]
それはLinq to なに?

580 名前:578 mailto:sage [2011/01/27(木) 21:54:36 ]
多分Linq to SQLです
何故「多分」かと言うと、Entityとの違いがわからんからです
DBはSQL Server2005です

581 名前:デフォルトの名無しさん mailto:sage [2011/01/27(木) 23:57:21 ]
[TableA]
Key1    Key2
hoge    fuga
foo     bar

[TableB]
Key1    Key2    Key3
hoge    fuga     1

[Result]
Key1    Key2    Key3
hoge    fuga     1
foo     bar     NULL


582 名前:581 mailto:sage [2011/01/28(金) 00:04:25 ]
途中で送ってしもた

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

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

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

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



585 名前:578 mailto:sage [2011/01/28(金) 19:42:25 ]
>>584
ありがとうございました
無事できました

586 名前:デフォルトの名無しさん mailto:sage [2011/02/08(火) 22:46:26 ]
Linqでクロス集計とかできますかぁ?

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

588 名前:デフォルトの名無しさん [2011/02/18(金) 23:37:45 ]
ttp://www.g1sys.co.jp/seminar090515.html
にあるような複雑な消費税計算もLINQなら余裕ですよね?



589 名前:デフォルトの名無しさん mailto:sage [2011/02/19(土) 03:20:21 ]
向こうで馬鹿にされたからってこっち荒らすなよ

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

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

592 名前:デフォルトの名無しさん mailto:sage [2011/03/25(金) 21:56:40.88 ]
>>591
そんなイミフな規約があるとはかわいそうに

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


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



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

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

597 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 02:01:44.67 ]
拡張メソッドを普通に呼び出すのもダメなのか?

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

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

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


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

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

603 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:38:29.25 ]
>602
そういう意味ならstatic readonlyでもダメだろ


604 名前:デフォルトの名無しさん mailto:sage [2011/03/27(日) 12:48:55.51 ]
>>602
もちろんprivateの話

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



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

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

607 名前:デフォルトの名無しさん [2011/03/31(木) 14:49:08.10 ]
LINQは糞

608 名前:デフォルトの名無しさん [2011/04/02(土) 21:40:07.08 ]
可読性が著しく悪化する

609 名前:デフォルトの名無しさん mailto:sage [2011/04/07(木) 22:52:52.61 ]
SQLとかXML使わない人にはLINQって無用?

610 名前:デフォルトの名無しさん mailto:sage [2011/04/07(木) 22:57:19.29 ]
コレクションも配列もIEnumerable<T>も使わないなら無用

611 名前: 忍法帖【Lv=10,xxxPT】 mailto:sage [2011/04/08(金) 00:35:23.25 ]
じゃあ必要じゃないか!

612 名前:デフォルトの名無しさん mailto:sage [2011/04/08(金) 01:19:05.23 ]
えっ

613 名前: 【東電 78.9 %】 mailto:sage [2011/04/08(金) 22:51:39.37 ]
バイバイ
さよおなら
あーりがとー

614 名前:デフォルトの名無しさん mailto:sage [2011/04/08(金) 23:54:00.10 ]
あんたー
行かないでー



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

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

617 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 19:19:33.39 ]
LINQテクノロジ入門はないな。

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

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

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

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

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

623 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 00:01:06.96 ]
javaとか滅亡すればいいのに

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



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

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

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

628 名前:デフォルトの名無しさん mailto:sage [2011/06/05(日) 11:58:43.36 ]
XPathかと思ったら・・・

629 名前:デフォルトの名無しさん mailto:sage [2011/06/06(月) 07:34:52.23 ]
Xquery

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

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

632 名前:デフォルトの名無しさん mailto:sage [2011/06/10(金) 00:45:13.06 ]
Logみれというのはごもっともなんだが、明らかにインデックスのはってある絡むだけをwhereで使ってんないんだよね・・・
ちなみにちょと違うかもしれんがこんなのあった。
social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/cfa263a0-fc7b-4da5-982c-901da60236db/

633 名前:デフォルトの名無しさん mailto:sage [2011/06/11(土) 07:50:22.35 ]


634 名前:デフォルトの名無しさん [2011/06/26(日) 21:45:11.58 ]
まじっすか!!!



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

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

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

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

637 名前:デフォルトの名無しさん [2011/06/28(火) 21:01:46.09 ]
SelectedItems
Item
Count

SelectedIndices
Item

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

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

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

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

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

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

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

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


644 名前:天使 ◆uL5esZLBSE mailto:sage [2011/07/01(金) 20:33:00.14 ]
>>638
ハアァァァァアァァァァァァァァアアァ????
なるほどゴミなわけだ




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

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

647 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 09:51:37.05 ]
いまいちわからん。

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


648 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 10:41:45.19 ]
言葉の意味はよく分からんがとにかくすごい勘違いだ

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

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

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

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

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

651 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 16:10:54.32 ]
>>647
全然違う。

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

652 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 16:41:34.63 ]
>>649
まずはLINQ to ObjectとLINQ to SQLの違いを勉強してから来い

653 名前:デフォルトの名無しさん mailto:sage [2011/07/06(水) 21:35:56.48 ]
詳しくない人は、IQueryableについて調べてから出直してください。

654 名前:デフォルトの名無しさん mailto:sage [2011/07/07(木) 23:26:47.53 ]
教えてください。
クラスの配列を特定の要素でグループ化して、その中で別の要素の値が
もっとも小さいモノを取得したいと考えています。

var rows = new classA[] {
new classA { id = 1, group = 1, value = 100 },
new classA { id = 2, group = 1, value = 101 },
以下略 };

こんな感じの配列を group の値ごとに、同じ group をもつの同士の中で value が最小のレコード?を選びたい。
で、LINQ を利用してこんなことをしてみました。(間違いがあっても大目に見てください)

var list = from a in rows group a by a.group;
foreach( var x in list )
{
var row = from b in x where b.value = x.min( y => y.value );
row の保存処理;
}

一応これでも期待した動作はするんですが、もっときれいに一発でやれそうな気がします。
もっとよい方法があれば、ご教示いただけませんか?



655 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 01:21:39.32 ]
クエリ式じゃないけど
rows.OrderBy(e => e.value).GroupBy(e => e.group).Select(e=>e.First());
これでいけるが、groupってプロパティ名は・・・

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

657 名前:デフォルトの名無しさん mailto:sage [2011/07/08(金) 05:09:43.01 ]
var list =
from a in rows
group a by a.@group into g
select g.OrderBy(x => x.value).First();


658 名前:654 mailto:sage [2011/07/09(土) 00:03:39.81 ]
ありがとうございます。

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

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

659 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:12:17.04 ]
int[] ia = {0,1,2,3,4,5,6,7,8,9}
に対して、並べ替えが
ia = {5,6,7,8,9,4,3,2,1,0}
となるようなLINQの書き方を教えてください。

660 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:16:43.87 ]
それは具体的にどういうルールなんだ
その例だけだとたくさんアプローチがあるんだが

661 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:28:28.71 ]
0〜4までのグループ1は降順で、5〜9までのグループ2は昇順で、
グループ2→グループ1の順に並べたいです。

662 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:47:10.41 ]
グループ分けは数値の大きさで決定?配列内での位置で決定?

663 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:47:48.84 ]
エスパーさんの御指名でしたか

664 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:48:45.38 ]
数値の大きさです。




665 名前:デフォルトの名無しさん mailto:sage [2011/07/19(火) 15:53:57.02 ]
from i in ia
orderby i < 5 ? -i : i
orderby i < 5 ? 1 : 0
select i

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

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

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

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

670 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 02:53:47.23 ]
>>668
そのコードの場合、Select(x => x)は不要だね。

private static bool Predicate(int x)
{
return x < 4;
}

と書くのをラムダ式にすると x => x < 4 となるわけで、xは変数そのもの。
もっと展開すれば
foreach(var x in array)
{
if (Predicate(x)) yield return x;
}

だから、 x は配列中の各要素が来る。

671 名前:デフォルトの名無しさん mailto:sage [2011/07/20(水) 19:13:40.41 ]
>>668
www.atmarkit.co.jp/fdotnet/chushin/roadtolinq_01/roadtolinq_01_02.html
↑これのFigure 9。

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

672 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 06:46:39.84 ]
>>670
Selectの有無でqの戻り値が変わることもあるよ

673 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 11:18:41.76 ]
え?まじで?どういう場合に?

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



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

676 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 21:40:50.63 ]
まあ、ReferenceEqualsでもしない限りは。
普通しないと思うし。

677 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 01:02:05.32 ]
皆型までみないのか。

678 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 01:26:27.26 ]
LINQはインターフェイス中心だしね。

679 名前:デフォルトの名無しさん mailto:sage [2011/08/08(月) 19:29:01.07 ]
DataTableをSELECTして匿名型になると元に戻すのが大変なんよー

680 名前:デフォルトの名無しさん mailto:sage [2011/08/14(日) 00:44:37.92 ]
先生早く来ないかな

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

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

682 名前:デフォルトの名無しさん mailto:sage [2011/09/04(日) 02:50:26.04 ]
ああ、すまん、>>675って意味か…

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

684 名前:デフォルトの名無しさん [2011/09/06(火) 13:29:04.49 ]
Dim xmldoc As XElement = XElement.Load("C:\test.xml")
Dim query = From c In xmldoc.Descendants("八百屋") select c (ここからの条件が解りません)

For Each result In query
Dim Apple As String = result.Element("リンゴ").Attribute("在庫").Value
Dim Mikan As String = result.Element("みかん").Attribute("在庫").Value
上記のような感じで属性を取得していきます。
Next
宜しくお願いします。



685 名前:デフォルトの名無しさん [2011/09/06(火) 13:32:18.03 ]
<設定内容>
<八百屋 ID="001">
<果物>
<リンゴ 在庫="YES"/>
<みかん 在庫="YES"/>
<メロン 在庫="NO"/>
</果物>
<野菜>
<大根 在庫="NO">
<白菜 在庫="YES">
</野菜>
<缶詰>
<桃 在庫="NO">
<みかん 在庫="YES">
</缶詰>
</八百屋>

</設定内容>

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

687 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 21:03:19.46 ]
ちょっとやりたい事が伝わらない…

こんなこと?
Import System.Xml.XPath

Dim qry = From c In xmldoc.XPathSelectElements("設定内容/八百屋")
Where c.Attribute("ID").Value = "001"
Select c

※ qryは八百屋ノードの列挙データ

てかたぶんやりたいことはLINQじゃなくて、XPathの方がすっきりするような気がする…

688 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 21:59:22.20 ]
from item in xmldoc.Descendants("八百屋")
let 果物 = item.Element("果物")
let 野菜 = item.Element("野菜")
let 缶詰 = item.Element("缶詰")
select new
{
HasApple = 果物.Element("リンゴ").Attribute("在庫").Value == "YES",
HasPeach = 缶詰.Element("桃").Attribute("在庫").Value == "YES"
}

みたいな感じでしょうか?VBも多分同じ感じなはず。


689 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 17:12:16.76 ]
親子構造テーブル検索をしたいのですが、一発で取得する方法はありますか?
スキーマがID,親IDとなっていて、
A,null-+-A1,A
+-A2,A-+-A21,A2
B,null-+-B1,B
+-B2,B
+-B3,B-+-B31,B3-+-B311,B31
データがこのようになっていた場合、ID:Aで検索をかけてA,A1,A2,A21を取得したいです
ルートレコード(A)は取得できなくても構いません
また、A○やA○○と連番風になっていますが、実際はGUIDで、ID文字列中に親子を類推できる情報は一切ありません
よろしくお願いします

690 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 21:34:54.14 ]
分かりにくいし、データ構造の指定もないから逆に答えずらいわ…

private class A
{
  public string ID { get; set; }
  public string Parent { get; set; }
}

var l = new List<A>();
l.Add(new A() { ID = "A", Parent = null });
l.Add(new A() { ID = "A1", Parent = "A" });
l.Add(new A() { ID = "A2", Parent = "A" });
l.Add(new A() { ID = "A21", Parent = "A2" });
l.Add(new A() { ID = "B", Parent = null });
l.Add(new A() { ID = "B1", Parent = "B" });
l.Add(new A() { ID = "B2", Parent = "B" });
l.Add(new A() { ID = "B3", Parent = "B" });
l.Add(new A() { ID = "B31", Parent = "B3" });
l.Add(new A() { ID = "B311", Parent = "B31" });

string sel = "A";
var ret = new List<A>();
l.ForEach(x => { if (x.Parent == sel || ret.Any(y => y.ID == x.Parent)) ret.Add(x); });


691 名前:689 mailto:sage [2011/09/09(金) 12:38:38.00 ]
>>690
すみませんターゲットはSQLServer2005でした
でもこれでできそうなのでやってみます
ありがとうございました

692 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 03:26:25.43 ]
学校の宿題であることを願うばかりだ・・・

693 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 16:31:03.33 ]
テーブルをNodes (ID uniqueidentifier, ParentID uniqueidentifier)とすれば、SQLでもEntitiesでも

class Node {
  uniqueidentifier ID { get; set; }
  Node Node { get; set; } // ParentIDのリレーション (i.e. 親Node)
}

こんな感じのクラスになるはずだから、何も悩む必要はないと思うが?

694 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 10:53:41.53 ]
int[] data;

省略
init max = data.Where(e => 条件).Max();

このとき、条件に一致するのがなかったときシーケンスが空っぽだよって例外が出るよね
だからといって

var seq = data.Where(e => 条件);
if(seq.Count > 0) {
max = seq.Max
}

ってしようとするとintと比較できないってコンパイルエラー出るし、
結構不便だよね



695 名前:デフォルトの名無しさん mailto:sage [2011/09/18(日) 13:26:40.48 ]
seq.Count()だろ
でも一つ含まれてればいいんだから if (seq.Any()) の方がいい
一行で書くなら
int? max = data.Where(e=>条件).Select(e=>(int?)e).DefaultIfEmpty().Max();
かな

696 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 05:59:38.55 ]
>>695
了解

697 名前: 忍法帖【Lv=8,xxxP】 [2011/11/10(木) 08:11:23.35 ]
a

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

699 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 23:41:37.84 ]
出来ますん

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

701 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 05:02:02.84 ]
二次元配列でなくて、CSVの1レコード(1行)に当たるクラスを作って、
そのクラスの配列ないしList<T>として読み込むなら、LINQ to CSV使えば一行で出来る

var hhh = new CsvContext().Read<作ったクラス名>(str, new CsvFileDescription { TextEncoding = Encoding.UTF8 }).Distinct().OrderBy(x => x.ID).ToArray;

みたいな感じで (上は、念のため重複覗いてID順に並べたりしてる)

702 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 05:04:41.12 ]
↑ ちなみに str は読み込むCSVのファイル名を入れた変数

703 名前:デフォルトの名無しさん mailto:sage [2012/01/20(金) 08:08:43.31 ]
www.codeproject.com/KB/linq/LINQtoCSV.aspx

704 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 14:02:24.01 ]
質問なんですが、下のプログラムにてlinqでスマートに最後の行の状態にしたいんですが、
どういった方法がありますか?
var collection = new[] { 1, 2, 3 }; //これを
collection = ?
//var collection = new[] { 1, 2, 2, 3, 3, 3 }; //こうしたい



705 名前:704 mailto:sage [2012/01/27(金) 14:15:34.18 ]
すみません自己解決しました
var result = collection.SelectMany(i => Enumerable.Repeat(i, i));

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

707 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 18:29:22.29 ]
単なるループなら無駄だけど、N個の「なにか」が欲しいときは便利だね。

[LINQ]
var items = Enumerable.Range(0, N)
.Select(i => new Foo(i))
.ToArray();

[for]
var list = new List<Foo>();
for(var i=0;i<N;i++)
items.Add(new Foo(i));
var items = list.ToArray();


708 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 22:06:01.26 ]
アイドルが同じ名前を使ってるけど、
これって、商標権的にどうなの?
ja.wikipedia.org/wiki/LinQ

709 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 02:33:39.10 ]
LISPとかもいましたし

710 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 02:42:37.61 ]
>>708
これは酷い

711 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 08:30:57.04 ]
>グループ名のLinQは"Love in 九州"からの造語であり、またアイドル活動を通じて様々なものを"リンク"するという意味も込められている。
それならLinKにしろよ。。。

712 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 08:58:56.23 ]
九州の意味でQを使うのは、ローカルSFコンベンションの「Qコン」とか、
わりと古くから歴史がある(あの米澤さんも参加したことがある大会、のはず)。

713 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:12:39.82 ]
LINQが考えなしのアイドル?だかに汚された

714 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:34:17.58 ]
>>708
専門家ではないが、分野が異なれば(明らかに別物と分かるので)問題ないはず
この場合だと、

LINQの技術書買おうとして間違って写真集買ってしまう

とかありえんだろ



715 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 14:45:19.45 ]
最初は良スレだったのにネタが尽きたか

716 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 08:35:59.17 ]
昔秋葉原の楽器屋にORACLE Masterの参考書が売ってて
なんでかなと思ったらSOLってソフトの本と間違えてたみたい。

NoSQL系でLINQネイティヴ対応のが出れば流行るかねー
MS以外にポートしないとダメか


717 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 00:20:54.78 ]
【消しゴム】MONOを使ってみるスレ4【じゃない】
toro.2ch.net/test/read.cgi/tech/1329023778/

718 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 19:50:47.06 ]
アイドルはLinQでMSのはLINQだ

719 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 00:59:43.14 ]
theinterviews.jp/linq/3146658
LINQネタにも返してくれてるしそんなに怒るなよw

720 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:34:42.96 ]
アイドルも大変だなw

721 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 04:23:02.45 ]
律儀に返してるのかw

722 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:01:16.95 ]
ステマスレとして終息か

723 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 07:12:16.27 ]
特定PCのみ、LINQ to EntitiesのLINQのクエリ構文だと
単純なクエリでもtimeoutするくらい遅いのですが、
なにか分かりますか?ExecuteStoreQueryなら同等でも一瞬なんです。

・遅い
Using context As New Entities
  Dim hoge = (From a In context.hoge Where a.hoge = "xx").ToList()
End Using

・速い
Using context As New Entities
  Dim hoge = context.ExecuteStoreQuery(Of hoge) _
         ("select * from hoge where hoge = 'xx')
End Using

前者だと高い確率で以下が出ます。後者は全く出ません。Entitiesは同じものです。

{"Timeout に達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。
現在のコマンドで重大なエラーが発生しました。結果は破棄しなければなりません。
サーバーから結果を受信しているときに、トランスポート レベルのエラーが発生しました。 (provider: Session Provider, error: 18 - ピアによって接続が閉じられました)"}

724 名前:デフォルトの名無しさん mailto:sage [2012/06/27(水) 11:03:37.78 ]
サーバー一緒か?
いずれにしてもクエリーフックしてどう違うかみて、そのクエリーを単体でやったらどうなるかとかより切り分けれ



725 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 10:55:47.07 ]
>>724
サーバーも一緒です。接続文字列は変えていません。
ToTraceStringでクエリを抜きだしてみましたが、後者のクエリに全てのフィールドを
指定しているくらいで、他は同等でした。

ただ、SSMSで実行してみると、同様の現象は再現できました。・・のでEFは関係なさそうです・・
実行する度にレスポンスが返るのが遅くなります。
1回目:0秒、2回目:2秒、3回目:8秒、4回目:24秒、5回目:60秒・・というように。。
* だと実行を何度連打しても0秒で返ります。

DBの専用スレで聞いてきた方が良いですよね。。ありがとうございました。

726 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 13:03:56.26 ]
件数がアホみたいに多いとかじゃないの
ToListしてるってことは即時全結果返すってことだから

727 名前:デフォルトの名無しさん mailto:sage [2012/06/28(木) 13:13:47.69 ]
>>725
100件程度です。問題になる件数ではないと思います。First()でも同様でした。

あとsqlserverの専用スレで聞いてきましたのでマルチポストになってしまいますし、
こちらは閉め切ります。ありがとうございました。

728 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 09:49:47.53 ]
なってしまうじゃねえよ死ねカス

729 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 10:11:31.00 ]
聞いてくるって事前に書いたろうが。失せろクズ

730 名前:デフォルトの名無しさん mailto:sage [2012/06/29(金) 19:48:13.25 ]
結局はVMのせいか。なんでCPUって思ったんだろうね。

731 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 14:48:44.96 ]
VBだとFunction(x)とかの記述キチガイじみてるけど
デバッグ中に他の箇所修正できるとこは
使い捨てプログラム作るときはうらやましいな

732 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 14:54:02.15 ]
俺はC#の方がキチガイに見えるw x=>とか象形文字かよソレ。
なんか調べてるとき、vb読みに脳内変換するのがツライです・・

733 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 16:13:40.13 ]
そのうちIDE上でVB/C#のリアルタイム切り替えができる時代が来る

734 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 19:23:41.81 ]
>>732
VBにもラムダ式あるだろ



735 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 20:07:38.46 ]
そうだが、なにを言ってるんだおm

736 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 20:34:12.10 ]
ミッドチルダ式とベルカ式どっちが好き?

737 名前:デフォルトの名無しさん mailto:sage [2012/07/06(金) 21:51:23.02 ]
オギノ式

738 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:30:23.44 ]
LINQは必ず全部探索するのが嫌
木構造のグラフがあるとき条件を満たしたら早期打ち切り、
みたいな処理が書けない

739 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:57:56.60 ]
Any() みたいなのは見つかった時点でやめてるんじゃね?

740 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 23:57:33.89 ]
うん

741 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 18:01:26.34 ]
AsParallelってCPUリソース食う以外のデメリットってある?あんまり見ないなと・・

742 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 18:16:29.27 ]
並列化させると結果の順番が保証できない。
オプションで保証できるけどそれだと並列化の効果が落ちる。

743 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 19:02:00.50 ]
ほうほう。なるほど。d

744 名前:デフォルトの名無しさん mailto:sage [2012/08/06(月) 22:38:59.20 ]
結局要件次第なわけだけども…
そこまで強烈に並列性を求められて、かつ、並列化に向いてる処理ってのが、業務とかだとほとんどないはず。



745 名前:デフォルトの名無しさん mailto:sage [2012/08/07(火) 05:22:08.32 ]
異なるURLに対して一斉にHTTPでデータ取ってくる処理とかかな

746 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 00:47:56.74 ]
>>745
そういうのはParallelでやっちゃダメ。

Task.WaitAll もしくは、4.5で入る Task.WhenAll でやらないと効率悪い。

747 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 01:03:58.30 ]
横から補足すると
ParallelはCPU負荷が低いと並列度を上げるために新しいスレッドを立ち上げる。
そのためネットワークIO待ちで使うと数十のスレッドが次々と作られて非効率的。
スレッドの立ち上げは重い処理だし、メモリ使うし、切り替えにもオーバーヘッドかかるしでいい事ないよ。

748 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 10:13:12.64 ]
すべてのクエリ文はobj.Where(〜).Select(〜〜)みたいなメソッドチェーンに置き換え可能なんですか?


749 名前:デフォルトの名無しさん mailto:sage [2012/08/08(水) 16:38:48.52 ]
>>748
そりゃ、仕様書にそう明記されてるからなぁ。
クエリ式はメソッドチェーンへの置き換えで実装しますって。

750 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 16:02:22.16 ]
Zelda対応はいつになりますか?

751 名前:デフォルトの名無しさん mailto:sage [2012/08/09(木) 21:01:37.80 ]
一瞬なにかと…。リンクね。Legend of Zelda なら店頭へ

752 名前:デフォルトの名無しさん [2012/09/14(金) 12:08:02.54 ]
オフィシャルなドキュメントってmsdn.microsoft.com/ja-jp/library/vstudio/bb387098.aspx
なんですか?何か右欄のスペースが凄い見にくい・・・。

753 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 14:09:00.18 ]
<root>
<question>
<qtext>にしむらひろゆき?</qtext>
<correctid>3</correctid>
<choices>
<choice>
<choiceid>1</choiceid>
<ctext>MS</ctext>
</choice>
<choice>
<choiceid>2</choiceid>
<ctext>Apple</ctext>
</choice>
<choice>
<choiceid>3</choiceid>
<ctext>2ch</ctext>
</choice>
</choices>
</question>
</root>

上のようなXMLがあったとして
「にしむらひろゆき?:2ch」という結果を得たい場合、どのようにすれば良いでしょうか?

XDocument xdoc = XDocument.Load(@"c:\sample.xml");
XNamespace ns = "2ch.net";
var q = from n in xdoc.Descendants(ns + "question")
where (string)n.Element(ns + "correctid") == (string)n.Element(ns + "choiceid")
select (string)n.Element(ns + "qtext") + ":" + (string)n.Element(ns + "ctext");

こんな感じでは上手くいきませんでした。

754 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 22:44:52.58 ]
var x = from q in xml.Descendants("question")
        let id = (string)q.Element("correctid")
        let qt = (string)q.Element("qtext")
        from choice in q.Element("choices").Elements("choice")
        where (string)choice.Element("choiceid") == id
        select qt + ":" + (string)choice.Element("ctext");
XNamespaceは略



755 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 22:57:50.31 ]
>>754
ありがとうございます!
「let」句を使うのですね。使い方もちゃんと調べておきます。

756 名前:デフォルトの名無しさん mailto:sage [2012/09/14(金) 23:02:47.39 ]
いやlet句はこの場合楽できるぐらいの意味しかない
from句を重ねて使用するのが肝

757 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 10:41:08.80 ]
LINQ便利だけど、ローカル変数検索なんかで使う場合だと、遅いんだよね。
そろそろCLがコンパイル済みの最終実行状態を出力してくれればいいのに。。

758 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 10:43:41.46 ]
>>723

思いっきりTimeoutって書いてあるじゃねえかwww

759 名前:デフォルトの名無しさん mailto:sage [2012/09/15(土) 21:35:58.16 ]
さっき勉強したんだがLinq気持ちよすぎ精子吹いたwwwだれかC++に移植してくれ

760 名前:デフォルトの名無しさん mailto:sage [2012/09/17(月) 14:19:32.69 ]
c++でも使えるだろ

761 名前:デフォルトの名無しさん mailto:sage [2012/10/09(火) 17:16:21.87 ]
>>759
Ovenとかどうよ
p-stade.sourceforge.net/oven/doc/html/index.html

762 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 04:17:21.52 ]
where区で条件を動的にする方法はありませんか?

763 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 09:53:53.12 ]
>>762
(1)パラメータクエリで解決するケース
(2)さらに、and や or の条件が増えたり減ったりするなら、文字列をつぎはぎ
(3)実はSQL文で結合とかいろいろ熟練すれば解決するケース

のどれなんだろうな

764 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 10:17:54.51 ]
変数と変数の比較なら動的じゃないか。



765 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 18:39:25.06 ]
三項演算子使えばいけそうだな

766 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 21:37:04.90 ]
誰もが通るスパゲッティ率最高のSQL組立

767 名前:デフォルトの名無しさん [2013/02/01(金) 13:55:35.49 ]
class Data {
public List<Item> Items = new Items();
}

List<Data> dat = new List<Data>();
// ↑のdatリストから各Itemsプロパティの中身を全て抜出し、
// 1次元配列として得るにはどうしたらいいでしょうか?

768 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 16:52:24.22 ]
>>767
foreachで列挙しつつ、AddRange

クエリ文だけで済ませるのは難しいかもね。

769 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 17:14:16.34 ]
>>767
Item[]にしたいということなら
dat.SelectMany(x => x.Items).ToArray();

770 名前:デフォルトの名無しさん [2013/03/30(土) 19:52:58.27 ]
IEnumerableとかIQueryableとかって会話で使うとき
なんて発音してる?

遅延実行のナイスな活用例って
無限リストとか馬鹿でかいデーターソースしかないのかな
処理時間を確定させたくていつもToListしちゃう

771 名前:デフォルトの名無しさん mailto:sage [2013/03/30(土) 21:04:48.54 ]
アイエヌュムェラボー
アイクェリャボー

772 名前:デフォルトの名無しさん mailto:sage [2013/04/01(月) 15:49:06.61 ]
愛イニュメラブル
愛クエリアブル

773 名前:デフォルトの名無しさん [2013/04/03(水) 23:53:18.12 ]
アイナマーエーブル
イクォータブル

774 名前:デフォルトの名無しさん mailto:sage [2013/04/04(木) 11:04:11.27 ]
INumerable?
Equatable?



775 名前:デフォルトの名無しさん mailto:sage [2013/04/05(金) 01:05:00.06 ]
from x in xvideos where x.tag.Contains(&quot;anal&quot;) select x; /* 夜プログラミング部 */
engawa.2ch.net/test/read.cgi/poverty/1365090013/

776 名前:デフォルトの名無しさん [2013/04/18(木) 11:29:49.06 ]
エロい人おしえてくり。
string[] testdata = {"BT","SS","TB","MCQ","AABC","NT"};
string[] result = testdata.Where(p => p.Length == 2 ).ToArray();
だと
{"BT","SS","TB","NT"}
が帰ってくるのですが、中の順番が乱れることはないって保障されているのでしょうか?
保障されていないのなら元の順番をでSortすることは可能でしょうか?

777 名前:デフォルトの名無しさん mailto:sage [2013/04/18(木) 11:45:38.06 ]
配列のイテレータは順番が保障されている。
Whereはフィルタだけで順番の変更はしない。
並べ替えたいならOrderBy

>...ata.Where(p => p.Length == 2).OrderBy(s => s).ToAr...

778 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 07:29:14.20 ]
課題が解けずに困ってます。教えていただけませんか?
VBはスレ違いでしたらすいません。
スペースが文字化けしてしまうので-で代用しています。
Dim-;Inpdata,OutData-As-String
Dim-;RecordCnt-As-;Integer

Using-sr-As-;New-StreamReader(Text1,Shift_JIS),_
-sw-As-New-StreamWriter(Text2,Shift_JIS)
-Do-While ;Sr.Peek>=0
---RecordCnt=RecordCnt ;+ ;1
---OutData=;InpData
---sw.WriteLine(OutData)
Loop

上記コードについて以下のように処理するようコードを変更もしくは追加しなさい。
(変更or追加するところだけ教えてください)

1.変数InpDataの2桁目から4桁目の値に従い、文字属性の変数Age5に次の値を代入。
(000-004のとき01、005-009のとき02、010-014のとき03、015-019のとき04)
また出力ファイルの各レコードの末尾にAge5の値を付与して出力する。

2.変数InpDataの2桁目から4桁目の値が変数Ageと等しいレコードのレコード数(変数Cnt)をカウントする。
すべてのレコードについて処理が終了したら「該当レコード数/総レコード数」を画面に表示する。

779 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 08:27:19.55 ]
Dim Inpdata, OutData As String
Dim RecordCnt As Integer

Using sr As New StreamReader(Text1, Shift_JIS), sw As New StreamWriter(Text2, Shift_JIS)
  Do While sr.Peek >= 0
    RecordCnt = RecordCnt + 1
    OutData = InpData
    sw.WriteLine(OutData)
Loop

780 名前:デフォルトの名無しさん mailto:sage [2013/04/22(月) 08:47:25.25 ]
LINQ関係ないな
あとinpdataが空っぽのままだ

781 名前:デフォルトの名無しさん mailto:sage [2013/05/09(木) 23:35:28.70 ]
外部結合これでいいの?
ideone.com/W9XtxR
書き方が直接的じゃなくて気持ち悪いんだけど

782 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) 17:17:19.92 ]
linqは結局流行らなかったね

783 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) 18:16:40.42 ]
>>782

784 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:35:45.77 ]
where節とかで何個溜まったらそこまでって出来ないのかな?



785 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:03:51.88 ]
ちょっと意味が分からんが
Takeのことか?

786 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:05:58.53 ]
TakeWhile使え

787 名前:デフォルトの名無しさん mailto:sage [2013/09/05(木) 22:02:37.88 ]
ありがとうござます
そんな関数もあるのですね

enumerableのメンバ関数を勉強してみます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<217KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef