VisualStudio2008より追加された便利で強力な機能
統合言語クエリ (LINQ : Language Integrated Query)
ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。
【VB.NET】LINQ友の会【C#, C♯, C#】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2008/02/09(土) 23:51:34247デフォルトの名無しさん
2008/10/12(日) 20:47:40 Linq to Entityが生成する生のSQLを確認する方法を教えてください。
248デフォルトの名無しさん
2008/10/13(月) 00:46:17 それは実行される前に?恒常的に?
そうじゃないならログ見りゃいいと思うけど・・・
そうじゃないならログ見りゃいいと思うけど・・・
249デフォルトの名無しさん
2008/10/13(月) 17:15:00 >>248
実行時でかまいません。
Linq to SQLのようのDataContext.Logプロパティにあたるものが見当たらないようです。
またSystem.DiagnosticsのTraceやDebugでも確認できませんでした。
探し方が悪いのかもしれませんがSQLのログを出力する方法を教えてください。
実行時でかまいません。
Linq to SQLのようのDataContext.Logプロパティにあたるものが見当たらないようです。
またSystem.DiagnosticsのTraceやDebugでも確認できませんでした。
探し方が悪いのかもしれませんがSQLのログを出力する方法を教えてください。
250デフォルトの名無しさん
2008/10/13(月) 21:39:14 だから SQL Server なら確かプロファイラ起動してトレースの開始で…
と記憶を頼りにぐぐって気づいたんだが Express にはないのか
このツール。おおう。それとごめんトレースだった
2005 ならこんなの見つけたけど
ttp://code.google.com/p/sqlexpressprofiler/
と記憶を頼りにぐぐって気づいたんだが Express にはないのか
このツール。おおう。それとごめんトレースだった
2005 ならこんなの見つけたけど
ttp://code.google.com/p/sqlexpressprofiler/
251デフォルトの名無しさん
2008/10/17(金) 03:19:46 タイプセーフなデータベースプログラミング
ttp://d.hatena.ne.jp/higayasuo/20081014/1223969275
拡張メソッドとラムダ式と式木と匿名型とvarとあって良かったと思える瞬間。
ttp://d.hatena.ne.jp/higayasuo/20081014/1223969275
拡張メソッドとラムダ式と式木と匿名型とvarとあって良かったと思える瞬間。
252デフォルトの名無しさん
2008/10/17(金) 17:46:42 Entity FrameworkをLinqなしで使うと2番目の例っぽくなるね。
253デフォルトの名無しさん
2008/10/17(金) 19:35:37 多言語でLinqのパクリを作ろうと思っても、言語仕様のサポートが無いと
ああいう風にせざるをえないんだよな。
ああいう風にせざるをえないんだよな。
254デフォルトの名無しさん
2008/10/17(金) 22:35:24 まあ、だからC# 3.0がああなったわけで。
255デフォルトの名無しさん
2008/10/17(金) 22:53:01 その辺Booなら自分で言語使用作れるかと
256デフォルトの名無しさん
2008/10/18(土) 10:13:17 実際に動くものを作ってから言え
257デフォルトの名無しさん
2008/10/27(月) 22:19:23 時間ができたので久しぶりの >>1 です、だんだん慣れてきた、半年続けた結果分かったことLINQスゲー使えます
という訳でみんなこれ勉強しろ!!
とりあえずアドバイス、まずは yield return / yield break が自在に使いこなせるようになるといいです。
使い方のコツ
1.シーケンス( IEnumerable<T> 、データベースで言えばテーブル)の生成
2.from ... または System.Linq.Enumerable で加工(繰り返し)
3.ToArray() , ToList() , ToDictionary() , All() , Any() 等で結果生成。
これが標準パターン
元の列を作る → 加工 → 加工 ・・・ → 加工 → 配列化
基本的にこればっかりです。
ちなみに LINQ が真の力を発揮するのはデータベースではなく、日常的に使う配列やオブジェクトです。
いままではデータベースではクエリで簡単に実行できても、プログラム中ではできずと
やむなくデータベースに一旦突っ込んでやるか、フルスクラッチで同等機能を作り出すかと、
無意味なプログラム実行環境の大規模化を引き起こしていました、これが無くなります。
という訳でみんなこれ勉強しろ!!
とりあえずアドバイス、まずは yield return / yield break が自在に使いこなせるようになるといいです。
使い方のコツ
1.シーケンス( IEnumerable<T> 、データベースで言えばテーブル)の生成
2.from ... または System.Linq.Enumerable で加工(繰り返し)
3.ToArray() , ToList() , ToDictionary() , All() , Any() 等で結果生成。
これが標準パターン
元の列を作る → 加工 → 加工 ・・・ → 加工 → 配列化
基本的にこればっかりです。
ちなみに LINQ が真の力を発揮するのはデータベースではなく、日常的に使う配列やオブジェクトです。
いままではデータベースではクエリで簡単に実行できても、プログラム中ではできずと
やむなくデータベースに一旦突っ込んでやるか、フルスクラッチで同等機能を作り出すかと、
無意味なプログラム実行環境の大規模化を引き起こしていました、これが無くなります。
2581
2008/10/27(月) 22:20:21 とにかく『加工元が簡単に作れない』事には、LINQ は使い物になりません。
という訳でシーケンスの作り方のコツ
配列やList等は、IEnumerable<T> 持ちなのでそのまんまシーケンスその物である、これは当たり前。
*.バラバラな物をシーケンスにするコツ、『適当』に yield return をばらまく
このあまりに馬鹿らしく単純な使い方になかなか気付けなかったw
例
class Test {
int A;
string B;
// メンバーを片っ端からシーケンスにする
IEnumerable<object> Members() {
yield return A;
yield return B;
}
public override bool Equals(object obj) {
Test obj2 = obj as Test;
if(obj2==null) return false;
return this.Members().SequenceEqual(obj2.Members());
}
public override int GetHashCode() {
return this.Members().Aggregate(0, (acc, element) => acc ^ element.GetHashCode());
}
}
*.IEnumerable<T> を持っていないライブラリの古い糞クラス用にアダプターやヘルパー関数をたっぷり作っておくこと!!
例
IEnumerable<T> CreateEnumerable<T>(Func<int> getCount, Func<int, T> getItem) {
for (int i = 0; i < getCount(); ++i) yield return getItem(i);
} 標準で .Net Framework に準備して欲しい・・・
という訳でシーケンスの作り方のコツ
配列やList等は、IEnumerable<T> 持ちなのでそのまんまシーケンスその物である、これは当たり前。
*.バラバラな物をシーケンスにするコツ、『適当』に yield return をばらまく
このあまりに馬鹿らしく単純な使い方になかなか気付けなかったw
例
class Test {
int A;
string B;
// メンバーを片っ端からシーケンスにする
IEnumerable<object> Members() {
yield return A;
yield return B;
}
public override bool Equals(object obj) {
Test obj2 = obj as Test;
if(obj2==null) return false;
return this.Members().SequenceEqual(obj2.Members());
}
public override int GetHashCode() {
return this.Members().Aggregate(0, (acc, element) => acc ^ element.GetHashCode());
}
}
*.IEnumerable<T> を持っていないライブラリの古い糞クラス用にアダプターやヘルパー関数をたっぷり作っておくこと!!
例
IEnumerable<T> CreateEnumerable<T>(Func<int> getCount, Func<int, T> getItem) {
for (int i = 0; i < getCount(); ++i) yield return getItem(i);
} 標準で .Net Framework に準備して欲しい・・・
2591
2008/10/27(月) 22:21:21 二以上のシーケンスを同時に加工するときのコツ
1.ToArray() , ToList() 等で、一旦配列にする。
2.Enumerable.Range( 0 , seq.Count() ) で配列の添え字を列挙して使う(なかなか気付けなかったw)
例
var tmp1 = 元シーケンス1.ToList();
var tmp2 = 元シーケンス2.ToList();
var tmp3 = from index in Enumerable.Range(0,tmp1.Count-1)
select new { tmp1[index] , tmp2[index] };
3.ToDictionary や ToLookup を使って連想配列を経由するとさらに色々な事が簡単に
4.他にも色々便利なコンテナもあるので To○○ を拡張を沢山作っておくのがコツ
標準で .Net Framework に準備して欲しい・・・
1.ToArray() , ToList() 等で、一旦配列にする。
2.Enumerable.Range( 0 , seq.Count() ) で配列の添え字を列挙して使う(なかなか気付けなかったw)
例
var tmp1 = 元シーケンス1.ToList();
var tmp2 = 元シーケンス2.ToList();
var tmp3 = from index in Enumerable.Range(0,tmp1.Count-1)
select new { tmp1[index] , tmp2[index] };
3.ToDictionary や ToLookup を使って連想配列を経由するとさらに色々な事が簡単に
4.他にも色々便利なコンテナもあるので To○○ を拡張を沢山作っておくのがコツ
標準で .Net Framework に準備して欲しい・・・
2601
2008/10/27(月) 22:22:05 ありそうで実は無くて意外不便なもの
1.Excelを使うと良く登場するパータンで、前後の要素にアクセスしながら新しい列を作るような手段が実はない
[ ][0]
[3][=A2]
[4][=B2+A3]
[6][=B3+A4]
[2][=B4+A5]
[5][=B5+A6]
左の列を元に、右の列のようなシーケンスを作る関数を作っておくと便利、汎用関数も簡単につくれる。
これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・
2.ツリー構造の全要素列挙、汎用関数も簡単につくれる。
これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・
3.コントロールブレイク(コボラーの必殺技)も作っておくと便利。
COBOLは実は触ったことが一度もないのですが、どうも色々便利ノウハウが彼らにはあるようです。
現在鋭意開拓中
1.Excelを使うと良く登場するパータンで、前後の要素にアクセスしながら新しい列を作るような手段が実はない
[ ][0]
[3][=A2]
[4][=B2+A3]
[6][=B3+A4]
[2][=B4+A5]
[5][=B5+A6]
左の列を元に、右の列のようなシーケンスを作る関数を作っておくと便利、汎用関数も簡単につくれる。
これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・
2.ツリー構造の全要素列挙、汎用関数も簡単につくれる。
これなかった頃よく似た関数をあたりにぶちまけてしまった .Net Framework に準備して欲しい・・・
3.コントロールブレイク(コボラーの必殺技)も作っておくと便利。
COBOLは実は触ったことが一度もないのですが、どうも色々便利ノウハウが彼らにはあるようです。
現在鋭意開拓中
261デフォルトの名無しさん
2008/10/27(月) 22:22:31 Enumerableにある関数は、全部使い込みましょう、特に重要なのは
シーケンスを混ぜて一つのシーケンスを作る系
Enumerable.Concat()
Enumerable.Intersect()
Enumerable.Union()
Enumerable.Except()
シーケンスの先頭や部分を取得する系
Enumerable.First()
Enumerable.FirstOrDefault()
Enumerable.Take()
Enumerable.Skip()
全シーケンスのチェック、これ以上複雑な物は foreach の方がかえって分かりやすい気がする。
Enumerable.All()
Enumerable.Any()
Enumerable.SequenceEqual()
要素の型変換、指定型のみ抽出
Enumerable.Cast()
Enumerable.OfType()
マニュアルが余りに理解不能な文書なので、動作を確かめながら自分の言葉で整理しておくと便利です。
生成用関数、加工用関数、結果生成用関数の三つに分類してみると、すっきりしてきます。
シーケンスを混ぜて一つのシーケンスを作る系
Enumerable.Concat()
Enumerable.Intersect()
Enumerable.Union()
Enumerable.Except()
シーケンスの先頭や部分を取得する系
Enumerable.First()
Enumerable.FirstOrDefault()
Enumerable.Take()
Enumerable.Skip()
全シーケンスのチェック、これ以上複雑な物は foreach の方がかえって分かりやすい気がする。
Enumerable.All()
Enumerable.Any()
Enumerable.SequenceEqual()
要素の型変換、指定型のみ抽出
Enumerable.Cast()
Enumerable.OfType()
マニュアルが余りに理解不能な文書なので、動作を確かめながら自分の言葉で整理しておくと便利です。
生成用関数、加工用関数、結果生成用関数の三つに分類してみると、すっきりしてきます。
262デフォルトの名無しさん
2008/10/27(月) 23:24:32 サンプル通りにやってもAddの定義が無いのですが‥‥
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46703&forum=7&2
ぶっちゃけ、この常連しんさんと全く同じ質問なのですが、
この人、質問して、自己解決して、回答書いてないので‥‥
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46703&forum=7&2
ぶっちゃけ、この常連しんさんと全く同じ質問なのですが、
この人、質問して、自己解決して、回答書いてないので‥‥
263デフォルトの名無しさん
2008/10/27(月) 23:38:24 関数型プログラム言語触れば別に驚くことでもない
264デフォルトの名無しさん
2008/10/28(火) 01:43:36 Firstも使うけどSingleもよく使う
265デフォルトの名無しさん
2008/10/28(火) 03:14:06266262
2008/10/28(火) 13:58:59267デフォルトの名無しさん
2008/10/28(火) 17:52:37268デフォルトの名無しさん
2008/10/31(金) 16:20:09 これってORマッピングツールみたいなものか?
269デフォルトの名無しさん
2008/10/31(金) 19:53:08 >>267
ラムダで書くと見た目が不必要に複雑になるからな
ラムダで書くと見た目が不必要に複雑になるからな
270デフォルトの名無しさん
2008/10/31(金) 19:59:39 C#の方は XML to LINQ を無理やりC#構文で書かせるのはなんとかしてほしい。
データ操作まで無理やりオブジェクト指向にするとかえって記述がグダグダになるんだよ。
データ操作は特化した記述がいい。
データ操作まで無理やりオブジェクト指向にするとかえって記述がグダグダになるんだよ。
データ操作は特化した記述がいい。
271デフォルトの名無しさん
2008/10/31(金) 20:27:08 同じ記述でXMLが扱える所が利点なのに?
わざわざ特化した記述作って、新しく覚えないといけなかったら魅力感じないな
わざわざ特化した記述作って、新しく覚えないといけなかったら魅力感じないな
272デフォルトの名無しさん
2008/10/31(金) 20:35:02 もしかして関数型構築のこと?
273デフォルトの名無しさん
2008/10/31(金) 22:23:22 >>269
全部クエリ式で書けない場合は,joinとかletとか使わない限りは全部拡張メソッドで俺は書いちゃうな
全部クエリ式で書けない場合は,joinとかletとか使わない限りは全部拡張メソッドで俺は書いちゃうな
274デフォルトの名無しさん
2008/11/01(土) 02:17:30 クエリ式みたいなものを自由に拡張できるようにして欲しいお(´・ω・`)
275デフォルトの名無しさん
2008/11/01(土) 02:29:34 そんなことしたらカオスになるじゃないか
276デフォルトの名無しさん
2008/11/01(土) 09:41:51 クエリ式は抽象化の度合いを下げないまま、
foreachをネストさせた時の様に変数を扱えるのが便利だね。
これを拡張可能にすると・・・関数型っぽくなる気がする。
foreachをネストさせた時の様に変数を扱えるのが便利だね。
これを拡張可能にすると・・・関数型っぽくなる気がする。
277デフォルトの名無しさん
2008/11/01(土) 09:50:56278デフォルトの名無しさん
2008/11/01(土) 10:45:55279デフォルトの名無しさん
2008/11/01(土) 11:38:48 遅延評価を繋げるだけならほとんど遅くはならないはず
280デフォルトの名無しさん
2008/11/01(土) 11:49:52 遅い速いは相対的なものだからどのレベルで遅いといってるのか示さないと議論にならない。
非常に細かいパフォーマンスを気にしているなら、
ラムダ式(デリゲート)を使うので関数の呼び出しがインライン化されないとか、
SumやMaxなど集計系メソッドを複数使った場合にちょっと効率の悪いことをしているとか
そんなところだね。
非常に細かいパフォーマンスを気にしているなら、
ラムダ式(デリゲート)を使うので関数の呼び出しがインライン化されないとか、
SumやMaxなど集計系メソッドを複数使った場合にちょっと効率の悪いことをしているとか
そんなところだね。
281デフォルトの名無しさん
2008/11/01(土) 12:18:38 Reverseってバッファ使うから即時実行だと思ってたんだけど、Reverseの呼び出し時じゃなくて
最初のMoveNextの呼び出しの時点ですべての結果が決まるから遅延実行になるのか
速い遅い気にするならどういう実装になってるか気にしないといけないね
最初のMoveNextの呼び出しの時点ですべての結果が決まるから遅延実行になるのか
速い遅い気にするならどういう実装になってるか気にしないといけないね
282デフォルトの名無しさん
2008/11/01(土) 12:31:55 3.0出始めの時に誰かが、foreachで条件とか変換とか並べて書いたのと、クエリ式とか並べて頴田の比べて結構違いがあったような。
283デフォルトの名無しさん
2008/11/01(土) 12:37:47 Linq to ObjectとLinq to SQLは分けないと話が食い違うから要注意。
284デフォルトの名無しさん
2008/11/01(土) 12:44:36 この文脈でどう読んだらto SQLになるのか
285デフォルトの名無しさん
2008/11/01(土) 12:50:21 4.0の紹介ビデオみてるが、よいなぁこれ・・・
来年早々にも出してくれんかな・・・
来年早々にも出してくれんかな・・・
286デフォルトの名無しさん
2008/11/01(土) 13:11:04 PLINQとか並列化関係いいなぁ・・
287デフォルトの名無しさん
2008/11/05(水) 00:04:48 4.0の紹介ビデオってmsdnにある?
288デフォルトの名無しさん
2008/11/05(水) 00:12:26 http://channel9.msdn.com/pdc2008/TL16/
ちなみに、パスを1段削って、
http://channel9.msdn.com/pdc2008/
にするとPDCのセッションの一覧が出てくる。
ちなみに、パスを1段削って、
http://channel9.msdn.com/pdc2008/
にするとPDCのセッションの一覧が出てくる。
289デフォルトの名無しさん
2008/11/05(水) 00:31:16 thx
290デフォルトの名無しさん
2008/11/06(木) 01:31:48 C#インタプリタ、すげぇ!
291デフォルトの名無しさん
2008/11/06(木) 09:38:50 >>282
http://ufcpp.net/study/csharp/sp3_linqreconstruct.html#iterator
これ?
foreach で置き換えるだけじゃたいして性能変わらない。
ここで違いが出てるのはそれの次の節の話で、
「if をループの外に出せ」と同じ原理で
「可能な限り where を from の上に」ってやるとパフォーマンス結構変わる。
http://ufcpp.net/study/csharp/sp3_linqreconstruct.html#iterator
これ?
foreach で置き換えるだけじゃたいして性能変わらない。
ここで違いが出てるのはそれの次の節の話で、
「if をループの外に出せ」と同じ原理で
「可能な限り where を from の上に」ってやるとパフォーマンス結構変わる。
292デフォルトの名無しさん
2008/11/06(木) 10:16:15 LINQのクエリ式とSQLの一番の違いがプランナの有無。
クエリ式は書いた順番どおりに処理していくが、
SQLはプランナが最適な実行計画を立てる。
クエリ式は書いた順番どおりに処理していくが、
SQLはプランナが最適な実行計画を立てる。
293デフォルトの名無しさん
2008/11/06(木) 10:39:15 LinqtoObjectも気合い入れてプロバイダ書けばプランナ相当のもの記述可能?
いや書く気毛頭無いですが
いや書く気毛頭無いですが
294デフォルトの名無しさん
2008/11/08(土) 12:26:24 やろうとおもえばLINQでスクリプト言語書けるよ
295デフォルトの名無しさん
2008/11/09(日) 21:52:31 >> 294
出だしだけでもKWSK
出だしだけでもKWSK
296デフォルトの名無しさん
2008/11/11(火) 17:07:42 LINQ to SQLって無くなるの?
なんつーか、ぶちまければ良いってもんじゃねぇだろ。
そんなのはオプソ系に任せとけよ。
なんつーか、ぶちまければ良いってもんじゃねぇだろ。
そんなのはオプソ系に任せとけよ。
297デフォルトの名無しさん
2008/11/11(火) 18:08:39 何で無くなると思ったのさ?
298デフォルトの名無しさん
2008/11/11(火) 18:35:18 なくなるっつーかLinq to Entityに置き換えでしょ。
別に今のところは対して書き方が違うわけじゃないし
Linq to Entity完成までの代打的存在として十分用を果たしたような。
別に今のところは対して書き方が違うわけじゃないし
Linq to Entity完成までの代打的存在として十分用を果たしたような。
299デフォルトの名無しさん
2008/11/11(火) 22:44:48 うむ。かなりの部分でSQLの開発楽にしてくれた。
ストーリーにちゃんと沿わないと痛い目あうがなwww
ストーリーにちゃんと沿わないと痛い目あうがなwww
300デフォルトの名無しさん
2008/11/11(火) 23:18:07 >>296
開発が止まるだけで今後も当面は.NET Frameworkに標準搭載が続くんじゃないの?
開発が止まるだけで今後も当面は.NET Frameworkに標準搭載が続くんじゃないの?
301デフォルトの名無しさん
2008/11/12(水) 00:12:05 Entity Frameworkは絶対こける。
間違いない。
間違いない。
302デフォルトの名無しさん
2008/11/12(水) 00:44:11 >>301
まあVer.3ぐらいになるまでは毎回大変更の嵐だろうな。
まあVer.3ぐらいになるまでは毎回大変更の嵐だろうな。
303デフォルトの名無しさん
2008/11/12(水) 17:23:24 Entity FrameworkはLinq to SQLの問題点が色々と解決されてるんだけど
デザイナが使いにくすぎる。
RailsのActiveRecordみたいに
ちょこちょこっとクラスに属性を付ければモデル完成、
ってのフレームワークだったらよかったのに。
デザイナが使いにくすぎる。
RailsのActiveRecordみたいに
ちょこちょこっとクラスに属性を付ければモデル完成、
ってのフレームワークだったらよかったのに。
304デフォルトの名無しさん
2008/11/20(木) 12:30:10 LINQ to SQLってADO.NETより目茶苦茶いいな。
更新系では、生のSQL文に完全なWHERE句を入れてくれるし、
非接続型・楽観的制御(←赤間さん流)では文句なし。
あと、生SQLのサブクエリ相当の組み合わせを段階を踏んで書けるのもいい。
デバッグも迅速になりそう。
更新系では、生のSQL文に完全なWHERE句を入れてくれるし、
非接続型・楽観的制御(←赤間さん流)では文句なし。
あと、生SQLのサブクエリ相当の組み合わせを段階を踏んで書けるのもいい。
デバッグも迅速になりそう。
305デフォルトの名無しさん
2008/11/20(木) 15:06:45 俺、LINQ to P2P で当てたら結婚すんだ。
306デフォルトの名無しさん
2008/11/20(木) 21:51:19 >>304
消える運命にあるが
消える運命にあるが
307デフォルトの名無しさん
2008/11/20(木) 22:15:10 なんらかの形で残るよ。使ってみれば、この方向性で進化していくんだろうと判る。
今のはちょっとSQL Serverに特化しすぎてるからディスコンかもしれないけどさ。
今のはちょっとSQL Serverに特化しすぎてるからディスコンかもしれないけどさ。
308デフォルトの名無しさん
2008/11/20(木) 22:16:56 >>307
この方向性で進化した結果がLinq to Entityなんだけど、今のところいまいちの出来。
この方向性で進化した結果がLinq to Entityなんだけど、今のところいまいちの出来。
309デフォルトの名無しさん
2008/11/20(木) 22:32:43 >>308
Entity Framework自体まだ手を付けてないのだが、どういまいち?
Entity Framework自体まだ手を付けてないのだが、どういまいち?
310デフォルトの名無しさん
2009/01/04(日) 23:25:17 例えば、
Select Sum(col1),Sum(col2),Sum(col3) from Table1
なSQLだとLINQではどう書くの?
Select Sum(col1),Sum(col2),Sum(col3) from Table1
なSQLだとLINQではどう書くの?
311デフォルトの名無しさん
2009/01/04(日) 23:46:52 >>310
そんな質問はつい最近掲示板で見た事あるな
そんな質問はつい最近掲示板で見た事あるな
312デフォルトの名無しさん
2009/01/04(日) 23:59:48 これか。ググったら一発で出てきたw
ttp://bbs.wankuma.com/index.cgi?mode=all&namber=30713
ttp://bbs.wankuma.com/index.cgi?mode=all&namber=30713
313デフォルトの名無しさん
2009/01/05(月) 00:53:25 ただのマルチじゃねーかw
315デフォルトの名無しさん
2009/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(), }
でいいんじゃね?
from item in Table1
select new {Sum1 = item.col1.Sum(), Sum2 = item.col2.Sum(), Sum3 = item.col3.Sum(), }
でいいんじゃね?
316デフォルトの名無しさん
2009/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;
});
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デフォルトの名無しさん
2009/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でも最適化されたと思うが。
それはクエリプロバイダ次第じゃなかろうか。
確かに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デフォルトの名無しさん
2009/01/07(水) 08:09:53 LINQ to SQL、生成されたSQLクエリがどんなのか見れるから試してみればいいんでは。
319デフォルトの名無しさん
2009/01/07(水) 08:21:29 いつもながらLinq to ほにゃららを明記しないと話がこじれるな。
Linq to Entityかもしれない。
Linq to Entityかもしれない。
320デフォルトの名無しさん
2009/01/07(水) 10:45:44 マルチに答えるとつけあがるからやめとけ
321デフォルトの名無しさん
2009/01/07(水) 12:34:27322デフォルトの名無しさん
2009/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();
確かに間違ってるな。
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デフォルトの名無しさん
2009/01/07(水) 14:08:38 ティマイザ→オプティマイザ
324デフォルトの名無しさん
2009/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)
});
初心者なりに考えてみた。
全然スマートじゃないけど勘弁してね。
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デフォルトの名無しさん
2009/02/11(水) 13:05:19var 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デフォルトの名無しさん
2009/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のスレにもレスさせて頂きます。ご了承くださいませ。
どうかアドバイスを下さい。
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デフォルトの名無しさん
2009/02/20(金) 07:06:29 >>326
マルチ乙
マルチ乙
328デフォルトの名無しさん
2009/02/20(金) 18:50:07 Microsohuto社製品なんて使うからだな
329デフォルトの名無しさん
2009/02/21(土) 04:59:59 >Microsohuto社
中国のばったものの会社?
中国のばったものの会社?
330デフォルトの名無しさん
2009/02/21(土) 21:28:41 株式会社精密工具
331デフォルトの名無しさん
2009/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から順番になるように保つ、という感じです
<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デフォルトの名無しさん
2009/02/23(月) 00:53:41 データが何個あるか調べて、XMLを作り直したほうが早いと思わんかね?
333デフォルトの名無しさん
2009/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>
<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デフォルトの名無しさん
2009/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を直接変更してもいいと思う。
<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デフォルトの名無しさん
2009/04/14(火) 23:27:35 WPF の UIElementCollection に対して、
Linq の機能(Where メソッドとか)を使いたいのですが、
UIElementCollection にはそのメソッドがありません。
どうすれば Linq の機能が使えるでしょうか?
Linq の機能(Where メソッドとか)を使いたいのですが、
UIElementCollection にはそのメソッドがありません。
どうすれば Linq の機能が使えるでしょうか?
336デフォルトの名無しさん
2009/04/14(火) 23:34:03 あー、non-generic な IEnumerable に対する Where とかないのか・・・
いったん、 .OfType<UIElement>() っての通すと使える気がする。
いったん、 .OfType<UIElement>() っての通すと使える気がする。
337デフォルトの名無しさん
2009/04/15(水) 11:49:27 OfTypeじゃなくて,元のコレクションに違う型が入ってないことを仮定するCastのほうがベター
※foreach(UIElement item in collection)相当
OfTypeを使うのはOfType<Button>みたいに意図的に型をフィルタリングするときだけ
※foreach(UIElement item in collection)相当
OfTypeを使うのはOfType<Button>みたいに意図的に型をフィルタリングするときだけ
339デフォルトの名無しさん
2009/04/19(日) 23:45:46 良スレなのに過疎ってて残念。
340デフォルトの名無しさん
2009/04/20(月) 12:48:21 SQLは糞
341デフォルトの名無しさん
2009/04/20(月) 18:09:58 何をもって糞と判断してるのか
342デフォルトの名無しさん
2009/04/20(月) 20:08:48 互換領域の文字だからだな
343デフォルトの名無しさん
2009/04/20(月) 22:24:47 int[] a = new int[] { 1, 2, 3 };
a.ToList().ForEach(i => Trace.WriteLine(i) );
ForEach するために毎回 ToList() してるんだけど、
ToList() しなくてすむ方法ないの?
a.ToList().ForEach(i => Trace.WriteLine(i) );
ForEach するために毎回 ToList() してるんだけど、
ToList() しなくてすむ方法ないの?
344デフォルトの名無しさん
2009/04/20(月) 22:33:14 >>343
素直に foreach (var i in a) するか、自分で IEnumerable 用の ForEach 拡張メソッド書くか。
素直に foreach (var i in a) するか、自分で IEnumerable 用の ForEach 拡張メソッド書くか。
345デフォルトの名無しさん
2009/04/20(月) 22:35:22 ttp://neue.cc/2009/04/04_145.html
346デフォルトの名無しさん
2009/04/20(月) 22:59:17 DataTrigger で特定の Rectangle だけ色を変えようと思って、
TargetName を指定したら、Style では TargetName は指定できないという
エラーが出てしまいました。
回避する方法はありますか?
TargetName を指定したら、Style では TargetName は指定できないという
エラーが出てしまいました。
回避する方法はありますか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★11 [蚤の市★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- __ブルガリア、Z世代の抗議が増税予算と汚職政治への怒りへ、政権が崩壊、若者を無視する政治への警告 [827565401]
- クズ「勉強頑張らなかった奴は一生DQNと一緒に肉体労働しろ」☚勉強頑張れるのも環境と巡り合わせなんだが? [783475554]
- スピッツの4番目の曲、決まらない
- 【時事】立憲民主党、30代の支持率が「ゼロ」😨 [369521721]
- 俺の口癖が「へー」「そう」「どうも」なんだが
- キャッシュレスに対応してない店、手数料が問題ならその分値上げすればいいじゃない、現金の管理や手数料、両替もただじゃない [943688309]
