VisualStudio2008より追加された便利で強力な機能
統合言語クエリ (LINQ : Language Integrated Query)
ちょっと使ってみると、意外と難しいし、テクニック的にも奥が深いものです。
関数型言語にしかないような機能ラムダ式(Lambda式)などはオブジェクト指向とは一味違う機能です。
DataBaseの操作にも、Xmlの操作にも、さらにもっと単純な配列なコンテナにさえ機能する
言語共通・高汎用な統合言語クエリを皆で一緒にマターリ勉強しましょう。
質問、便利なマイテクニックの発表、いろいろやっちゃってください。
探検
【VB.NET】LINQ友の会【C#, C♯, C#】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2008/02/09(土) 23:51:34120デフォルトの名無しさん
2008/02/23(土) 18:29:18 .ToList().ForEach(Console.WriteLine) でいいじゃん
121デフォルトの名無しさん
2008/02/23(土) 18:30:33 ToList超きもい
122デフォルトの名無しさん
2008/02/23(土) 18:32:42 遅延評価はLINQだと実態があいまいになりがちだがHaskellを使うと、なんというかテツガクしたくなる。
ものすごく面白いが、万人にお勧めではない。
ものすごく面白いが、万人にお勧めではない。
123デフォルトの名無しさん
2008/02/23(土) 18:35:44 IEnumerable<>でforeachするときの例っぽいの書こうとした^p^
124デフォルトの名無しさん
2008/02/27(水) 19:00:07 >>1 です
ちょっとスタイル変更、くだすれC#だと、配列よりも List クラスの方が需要ありそうだったので。
実際、実用上は配列って事はありえない気がしますし。
名前は全部漢字にして、型名には末尾に"型" と付けてみました。
ちょっとスタイル変更、くだすれC#だと、配列よりも List クラスの方が需要ありそうだったので。
実際、実用上は配列って事はありえない気がしますし。
名前は全部漢字にして、型名には末尾に"型" と付けてみました。
125デフォルトの名無しさん
2008/02/27(水) 19:00:49 Q.売上表で小計をもとめるような計算をしたい(1)
Aggregate が便利です。
以下の例では、合計原価と合計売価を求めます。解りやすさ優先で、型をすべて書ききったバージョンです。
System.Collections.Generic.List<売上帳の行型> 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
合計型 合計の初期値 = new 合計型() { 合計原価 = 0, 合計売価 = 0 };
合計型 合計表 = 売上帳.Aggregate(
合計の初期値,
(合計型 直前の合計, 売上帳の行型 行) => new 合計型() { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 }
);
dataGridView2.DataSource = new 合計型[] { 合計表 };
public class 売上帳の行型 {
public string 品名 { get; set; }
public int 数量 { get; set; }
public int 原価 { get; set; }
public int 売価 { get; set; }
}
public struct 合計型 {
public int 合計原価 { get; set; }
public int 合計売価 { get; set; }
}
Aggregate が便利です。
以下の例では、合計原価と合計売価を求めます。解りやすさ優先で、型をすべて書ききったバージョンです。
System.Collections.Generic.List<売上帳の行型> 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
合計型 合計の初期値 = new 合計型() { 合計原価 = 0, 合計売価 = 0 };
合計型 合計表 = 売上帳.Aggregate(
合計の初期値,
(合計型 直前の合計, 売上帳の行型 行) => new 合計型() { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 }
);
dataGridView2.DataSource = new 合計型[] { 合計表 };
public class 売上帳の行型 {
public string 品名 { get; set; }
public int 数量 { get; set; }
public int 原価 { get; set; }
public int 売価 { get; set; }
}
public struct 合計型 {
public int 合計原価 { get; set; }
public int 合計売価 { get; set; }
}
126デフォルトの名無しさん
2008/02/27(水) 19:01:50 >>125の続き 売上表で小計をもとめるような計算をしたい(2)
省けそうな型名は省略したバージョンです
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
var 合計表 = 売上帳.Aggregate(
new { 合計原価 = 0, 合計売価 = 0 },
(直前の合計, 行) => new { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 }
);
dataGridView2.DataSource = new[] { 合計表 };
省けそうな型名は省略したバージョンです
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
var 合計表 = 売上帳.Aggregate(
new { 合計原価 = 0, 合計売価 = 0 },
(直前の合計, 行) => new { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 }
);
dataGridView2.DataSource = new[] { 合計表 };
127デフォルトの名無しさん
2008/02/27(水) 19:03:01 >>126の続き 売上表で小計をもとめるような計算をしたい(3)
上記のコードが何をしているのかといいますと、以下のコードのような処理をしています。
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
var 直前の合計 = new { 合計原価 = 0, 合計売価 = 0 };
foreach (売上帳の行型 行 in 売上帳)
{
直前の合計 = new { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 };
}
dataGridView2.DataSource = new[] { 直前の合計 };
上記のコードが何をしているのかといいますと、以下のコードのような処理をしています。
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// お試し表示
dataGridView1.DataSource = 売上帳;
// 合計の計算方法
var 直前の合計 = new { 合計原価 = 0, 合計売価 = 0 };
foreach (売上帳の行型 行 in 売上帳)
{
直前の合計 = new { 合計原価 = 直前の合計.合計原価 + 行.数量 * 行.原価, 合計売価 = 直前の合計.合計売価 + 行.数量 * 行.売価 };
}
dataGridView2.DataSource = new[] { 直前の合計 };
128デフォルトの名無しさん
2008/02/27(水) 19:04:24 >>127の続き 売上表で小計をもとめるような計算をしたい(4)
これを使うと簡単になるケース
合計型と売上帳の行型が同じなら、コードは単純になります
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// 合計の計算
var 合計行 = 売上帳.Aggregate((直前の合計, 現在の行) => new 売上帳の行型() { 原価 = 直前の合計.原価 + 現在の行.数量 * 現在の行.原価, 売価 = 直前の合計.売価 + 現在の行.数量 * 現在の行.売価, 品名 = "合計" });
売上帳.Add(合計行);
// お試し表示
dataGridView1.DataSource = 売上帳;
これを使うと簡単になるケース
合計型と売上帳の行型が同じなら、コードは単純になります
var 売上帳 = new System.Collections.Generic.List<売上帳の行型>();
売上帳.Add(new 売上帳の行型() { 品名 = "デスクトップPC", 数量 = 1, 原価 = 100000, 売価 = 120000 });
売上帳.Add(new 売上帳の行型() { 品名 = "ノートPC", 数量 = 2, 原価 = 250000, 売価 = 280000 });
// 合計の計算
var 合計行 = 売上帳.Aggregate((直前の合計, 現在の行) => new 売上帳の行型() { 原価 = 直前の合計.原価 + 現在の行.数量 * 現在の行.原価, 売価 = 直前の合計.売価 + 現在の行.数量 * 現在の行.売価, 品名 = "合計" });
売上帳.Add(合計行);
// お試し表示
dataGridView1.DataSource = 売上帳;
129デフォルトの名無しさん
2008/02/27(水) 19:05:23 まとめ
駄目だ、どうあがいても単純になりません。
3 番目を書いてみたら、foreach で書いたほうが見通しがよさそうな感じすらしてきます。
綺麗になるのは、アキュムレーターの型とコンテナ要素の型が一致しているとき
もしくはアキュムレーターの型が int のような単純型で有る場合に限られます。
メソッド方式にはやはり何かが足りない感じがします。
LINQの新規キーワードとして、それも foreach をイメージできるような構文にして
"aggregate 売上帳" と書いたら、型名、その他をインテリセンスがズバズバッと書き出して、
作る側は中身をを書くだけといった具合になれば使えそうな気がするのですが……
もしくは Excel の、式のコピーのようなイメージができれば、やる事は一番上の式を書く事となるのですが。
駄目だ、どうあがいても単純になりません。
3 番目を書いてみたら、foreach で書いたほうが見通しがよさそうな感じすらしてきます。
綺麗になるのは、アキュムレーターの型とコンテナ要素の型が一致しているとき
もしくはアキュムレーターの型が int のような単純型で有る場合に限られます。
メソッド方式にはやはり何かが足りない感じがします。
LINQの新規キーワードとして、それも foreach をイメージできるような構文にして
"aggregate 売上帳" と書いたら、型名、その他をインテリセンスがズバズバッと書き出して、
作る側は中身をを書くだけといった具合になれば使えそうな気がするのですが……
もしくは Excel の、式のコピーのようなイメージができれば、やる事は一番上の式を書く事となるのですが。
130デフォルトの名無しさん
2008/02/28(木) 02:02:30 ところでこのコードってVB?
131デフォルトの名無しさん
2008/02/28(木) 11:52:14 驚くべきことに今まで一行もVBのコードは出てきていないんだ
132デフォルトの名無しさん
2008/02/28(木) 12:47:55 ほいじゃVB版Linq for XML
XMLリテラルが売りですのじゃ
Dim xm = <AAA>
<BBB id="1">aaaaacxzc</BBB>
<BBB id="2">aaaaaxczx</BBB>
<BBB id="3">aaaaaxcxz</BBB>
<BBB id="4">aaaaaxczx</BBB>
<BBB id="5">aaaaaxxxx</BBB>
<BBB id="6">aaaaazzzz</BBB>
<BBB id="7">aaaaacccc</BBB>
<BBB id="5">aaaaaxxxx</BBB>
<BBB id="6">aaaaazzzz</BBB>
<BBB id="7">aaaaacccc</BBB>
</AAA>
Dim rs = From x In xm...<BBB> _
Where x.@id > 2 _
Distinct Skip 1 Take 3 _
Order By x.@id Descending _
Select ID = x.@id, x
For Each r In rs
Console.WriteLine(r)
Next
XMLリテラルが売りですのじゃ
Dim xm = <AAA>
<BBB id="1">aaaaacxzc</BBB>
<BBB id="2">aaaaaxczx</BBB>
<BBB id="3">aaaaaxcxz</BBB>
<BBB id="4">aaaaaxczx</BBB>
<BBB id="5">aaaaaxxxx</BBB>
<BBB id="6">aaaaazzzz</BBB>
<BBB id="7">aaaaacccc</BBB>
<BBB id="5">aaaaaxxxx</BBB>
<BBB id="6">aaaaazzzz</BBB>
<BBB id="7">aaaaacccc</BBB>
</AAA>
Dim rs = From x In xm...<BBB> _
Where x.@id > 2 _
Distinct Skip 1 Take 3 _
Order By x.@id Descending _
Select ID = x.@id, x
For Each r In rs
Console.WriteLine(r)
Next
133デフォルトの名無しさん
2008/02/28(木) 13:15:08 クエリ式はC#よりVBの方が馴染んでるよなあ
VBのラムダ式は糞だけど
VBのラムダ式は糞だけど
134デフォルトの名無しさん
2008/02/28(木) 17:54:04 >>129
AggregateはSumやMaxと同じで集合関数として使うように設計されてるので
group by と組み合わせて使うのが普通なのだと思う。
この例だとSumが使えるのだがAggregateを使ってみた。
var 合計表 = (
from uri in 売上帳
group uri by 1 into g
select new 合計型(){
合計原価 = g.Sum(o => o.原価 * o.数量),
合計売価 = g.Aggregate(0, (t,o) => t + o.売価 * o.数量)
}).First();
Console.WriteLine("{0}, {1}", 合計表.合計原価, 合計表.合計売価);
AggregateはSumやMaxと同じで集合関数として使うように設計されてるので
group by と組み合わせて使うのが普通なのだと思う。
この例だとSumが使えるのだがAggregateを使ってみた。
var 合計表 = (
from uri in 売上帳
group uri by 1 into g
select new 合計型(){
合計原価 = g.Sum(o => o.原価 * o.数量),
合計売価 = g.Aggregate(0, (t,o) => t + o.売価 * o.数量)
}).First();
Console.WriteLine("{0}, {1}", 合計表.合計原価, 合計表.合計売価);
135デフォルトの名無しさん
2008/03/07(金) 01:17:17 C#なんだから大概の物は関数型チックにかくより普通に書いた方が
見やすいのは当たり前
見やすいのは当たり前
136デフォルトの名無しさん
2008/03/07(金) 11:55:15 Expression Treeってフィールドの値を変更できないのか
できたらおかしいのはわかるけどDynamicMethodの簡易版として使うには貧弱だな
できたらおかしいのはわかるけどDynamicMethodの簡易版として使うには貧弱だな
137デフォルトの名無しさん
2008/03/07(金) 12:01:30 >>136
そういう用途だと、LINQ の Expression から DLR の AST Expression に変換してしまうのがいいかも。
そういう用途だと、LINQ の Expression から DLR の AST Expression に変換してしまうのがいいかも。
138デフォルトの名無しさん
2008/03/07(金) 17:40:05 LINQってDataTableに対してグループ化をしてDataGridViewに表示したり出来るんですかね?
現在、DataTableに対してグループ化ってかなり無理矢理やらないと出来ないと思うんですが、
これができると、DataTableがかなり使いやすくなりそうです。
.NET3.5をインストールさせる動機になりそうなくらい・・・
現在、DataTableに対してグループ化ってかなり無理矢理やらないと出来ないと思うんですが、
これができると、DataTableがかなり使いやすくなりそうです。
.NET3.5をインストールさせる動機になりそうなくらい・・・
139デフォルトの名無しさん
2008/03/12(水) 12:24:53 みんな小難しいことばっかやってて、なんとなくLinq避けてたが、
実際に使ってみるとなかなかスイーツ(笑)な簡単さじゃないか。
List<T>なんか作って追加していって最後にToArray()してるようなのも
Linqで書き換えたら全部一行に出来そうだ。
実際に使ってみるとなかなかスイーツ(笑)な簡単さじゃないか。
List<T>なんか作って追加していって最後にToArray()してるようなのも
Linqで書き換えたら全部一行に出来そうだ。
140デフォルトの名無しさん
2008/03/13(木) 01:52:23 あれ?出勤、昼だか夜だかわからなくね?
141デフォルトの名無しさん
2008/03/13(木) 11:30:56 VB.NETもスレタイの仲間に入れてあげてください。
142デフォルトの名無しさん
2008/03/13(木) 13:24:30 VB.NETは新機能が全く話題にならないよな
143デフォルトの名無しさん
2008/03/13(木) 15:06:20144デフォルトの名無しさん
2008/03/13(木) 15:07:51 宣言時の型推論,ラムダ式とか?
145デフォルトの名無しさん
2008/03/13(木) 15:16:04 Xmlリテラルとか。
146デフォルトの名無しさん
2008/03/13(木) 15:18:19 C#2.0+C#3.0+αだな
147デフォルトの名無しさん
2008/03/13(木) 16:24:25 ぶっちゃけXML生書き出来るようになったからって・・・
使う奴っている?
今一歩使い道が見つからん・・・
使う奴っている?
今一歩使い道が見つからん・・・
148デフォルトの名無しさん
2008/03/13(木) 21:19:44 >Xmlリテラル
タイミング良くっつーかこんな記事がでてるね。
.NETプログラマーにとって、XSLTは終焉なのか?
ttp://www.infoq.com/jp/news/2008/03/XML-Literals
>XML Literalsは最初Haskell向けに開拓され、
>のちにMicrosoftにおいてC#で使用するために開発された。
>どちらの言語においてもうまく いかないことが判明したので、
>Visual Basicチームが飛び付いて、VB 9の礎石にした。
>これはそれほどまでに驚くことではない。
>というのもHaskell構文がVBScriptのインラインHTML表記の影響を
>もろに受けて いたからである。
まあヘジたんなら拒否るだろし、事実拒否ったんだろうなぁ。
タイミング良くっつーかこんな記事がでてるね。
.NETプログラマーにとって、XSLTは終焉なのか?
ttp://www.infoq.com/jp/news/2008/03/XML-Literals
>XML Literalsは最初Haskell向けに開拓され、
>のちにMicrosoftにおいてC#で使用するために開発された。
>どちらの言語においてもうまく いかないことが判明したので、
>Visual Basicチームが飛び付いて、VB 9の礎石にした。
>これはそれほどまでに驚くことではない。
>というのもHaskell構文がVBScriptのインラインHTML表記の影響を
>もろに受けて いたからである。
まあヘジたんなら拒否るだろし、事実拒否ったんだろうなぁ。
149デフォルトの名無しさん
2008/03/14(金) 22:40:14 テーブル値関数をLinq to SQLで利用しようとしてるんだけど、
実行したら、
ストアド プロシージャはクエリ内では使用できない。ってエラーになるんだよ。
これバグじゃないかな。
実行したら、
ストアド プロシージャはクエリ内では使用できない。ってエラーになるんだよ。
これバグじゃないかな。
150デフォルトの名無しさん
2008/03/15(土) 00:46:01 自己解決しました。ノシ
IsComposable=true がなかったのが原因みたいです。
なんだかなあ。
IsComposable=true がなかったのが原因みたいです。
なんだかなあ。
151デフォルトの名無しさん
2008/04/06(日) 03:35:46 保守
152sage
2008/04/13(日) 01:33:35 LINQでのサブクエリの書き方が分からん。どう書くの?
SELECT
A.KEY1, A.COL1, B.COL2
FROM
(
(SELECT * FROM TBL1) A
INNER JOIN
(SELECT * FROM TBL1) B
ON B.KEY1 = A.KEY1
)
SELECT
A.KEY1, A.COL1, B.COL2
FROM
(
(SELECT * FROM TBL1) A
INNER JOIN
(SELECT * FROM TBL1) B
ON B.KEY1 = A.KEY1
)
153デフォルトの名無しさん
2008/04/13(日) 02:32:31 そのままlinqに置き換えれば
var r =
from i in
(from a in TBL1
from b in TBL2
where a.KEY1 == b.KEY2
select new { A = a , B = b })
select new { KEY1 = i.A.KEY1 , COL1 = i.A.COL1 , COL2 = i.B.COL2 };
こんな感じだけど、この例だとサブクエリ必要なくね?
var r =
from i in
(from a in TBL1
from b in TBL2
where a.KEY1 == b.KEY2
select new { A = a , B = b })
select new { KEY1 = i.A.KEY1 , COL1 = i.A.COL1 , COL2 = i.B.COL2 };
こんな感じだけど、この例だとサブクエリ必要なくね?
154デフォルトの名無しさん
2008/04/13(日) 02:36:53 >>152
それ、LINQ だとサブクエリ要らない。
var q =
from a in tbl1
join b in tbl2 on a.Key equals b.Key
select new { a.Key, a.Col1, b.Col2 };
サブクエリは普通に ↓ みたいに書ける。
from a in
from b in list
select b.SomeProperty
select a.SomeProperty
それ、LINQ だとサブクエリ要らない。
var q =
from a in tbl1
join b in tbl2 on a.Key equals b.Key
select new { a.Key, a.Col1, b.Col2 };
サブクエリは普通に ↓ みたいに書ける。
from a in
from b in list
select b.SomeProperty
select a.SomeProperty
155デフォルトの名無しさん
2008/04/13(日) 14:50:18 そんなことしなくても
保守が容易な綺麗なコードを書けるから
(゚听)イラネ
保守が容易な綺麗なコードを書けるから
(゚听)イラネ
156デフォルトの名無しさん
2008/04/13(日) 16:44:19 最近LINQ初めて>>22見たんだけど、
コードが見通しよく整理されていく中盤からの展開は見てて痛快だなぁ
コードが見通しよく整理されていく中盤からの展開は見てて痛快だなぁ
157デフォルトの名無しさん
2008/04/24(木) 21:22:23158デフォルトの名無しさん
2008/04/24(木) 21:41:48159デフォルトの名無しさん
2008/05/24(土) 20:45:08 Linqで書くと速くならないなら需要ないんじゃない
SQLでおなかいっぱいで
SQLでおなかいっぱいで
160デフォルトの名無しさん
2008/05/24(土) 21:01:08161デフォルトの名無しさん
2008/05/24(土) 23:11:23 パラ?
お母さんが子供に教えるように教えてください
お母さんが子供に教えるように教えてください
162デフォルトの名無しさん
2008/05/24(土) 23:23:16163デフォルトの名無しさん
2008/05/25(日) 00:22:26 最初は書き方に戸惑うが、だいたいの書き方がわかってくればインテリセンス使えるのがとても大きい
164デフォルトの名無しさん
2008/05/25(日) 04:39:07 コンパイラによる構文チェックが行われるというのも大きい。
条件次第で内容が大きく変わるようなクエリを構成するときに、文字列の連結を間違えて
バグを作り込んでしまうような、つまらないミスを防げる。
DataContextの定義にあわせて自動でCREATE DATABASEしてくれるとか、生産性の向上に
つながる要素がいろいろあるよ。
俺もほとんど把握してないけどさ。
条件次第で内容が大きく変わるようなクエリを構成するときに、文字列の連結を間違えて
バグを作り込んでしまうような、つまらないミスを防げる。
DataContextの定義にあわせて自動でCREATE DATABASEしてくれるとか、生産性の向上に
つながる要素がいろいろあるよ。
俺もほとんど把握してないけどさ。
165デフォルトの名無しさん
2008/05/25(日) 09:04:21 SQLって、汎用コレクションデータ処理エンジンだね。
C/C++やらで何らかのデータ処理を行う場合、その度毎にアルゴリズムを考え、設計し、
コードを作りこまなくちゃいけないけど。
RDBだと、ちょこっとSQLを定義するだけで実際の処理はRDBのエンジンがやってくれる。
例えるなら文字列の正規表現みたいな感じで。
それが言語組み込みの文法として、RDBだとDBサーバを立て、テーブルを作り、データをインポートして
からじゃないと使えないのが、RDBに限らずC#言語上の任意のコレクションデータで使えてしまう
ってのは便利。
C/C++やらで何らかのデータ処理を行う場合、その度毎にアルゴリズムを考え、設計し、
コードを作りこまなくちゃいけないけど。
RDBだと、ちょこっとSQLを定義するだけで実際の処理はRDBのエンジンがやってくれる。
例えるなら文字列の正規表現みたいな感じで。
それが言語組み込みの文法として、RDBだとDBサーバを立て、テーブルを作り、データをインポートして
からじゃないと使えないのが、RDBに限らずC#言語上の任意のコレクションデータで使えてしまう
ってのは便利。
166デフォルトの名無しさん
2008/05/25(日) 09:41:44 >>161
インピーダンスミスマッチでぐぐれ
インピーダンスミスマッチでぐぐれ
167デフォルトの名無しさん
2008/05/25(日) 11:12:57 SQLMetalってすでにあるテーブルのオブジェクト定義のXMLを生成するものだよね?
逆に今あるオブジェクトからテーブルとかを生成するツールってあったっけ?
逆に今あるオブジェクトからテーブルとかを生成するツールってあったっけ?
168デフォルトの名無しさん
2008/05/25(日) 14:02:32169デフォルトの名無しさん
2008/05/25(日) 14:39:10170デフォルトの名無しさん
2008/06/02(月) 22:49:47 Linq人気ないから救済でAgeてやる
感謝しろビル
感謝しろビル
171デフォルトの名無しさん
2008/06/04(水) 08:38:01 PL/SQLですね。
172デフォルトの名無しさん
2008/06/09(月) 11:06:00173デフォルトの名無しさん
2008/06/15(日) 19:33:30 えーい
Linqも人気ないけど
ダメ技術のかほりがすっぞ
Linqも人気ないけど
ダメ技術のかほりがすっぞ
174デフォルトの名無しさん
2008/06/17(火) 02:07:55 使ったからといって、別に何かが楽になったりすっきりしたりするように見えないんだよな。
175デフォルトの名無しさん
2008/06/17(火) 07:25:18 ちょっとしたDBアプリ作るの楽になるが。
XMLとかにもいいと思うよ。
XMLとかにもいいと思うよ。
176デフォルトの名無しさん
2008/06/17(火) 21:00:53 メソッド形式は手軽に使えてすごく便利だよね
クエリ形式は「さあLINQ使っちゃうぞー」って感じになっちゃって好きじゃない
クエリ形式は「さあLINQ使っちゃうぞー」って感じになっちゃって好きじゃない
177デフォルトの名無しさん
2008/06/17(火) 22:19:07 未だにクエリ式だとpとかqとかのスコープがよくわかってない俺。
178デフォルトの名無しさん
2008/06/18(水) 03:55:30 fromやletが沢山必要になる場合は
クエリ式を使ってる
けど、それ以外ではクエリ式は全然使ってない
クエリ式を使ってる
けど、それ以外ではクエリ式は全然使ってない
179デフォルトの名無しさん
2008/06/19(木) 22:35:19 使い方も確立されてない未知のもんだからな。
ポテンシャルは高い気がする。
ポテンシャルは高い気がする。
180デフォルトの名無しさん
2008/06/20(金) 00:55:26 LINQきれいにかけるけれど、特にObjectLINQだと効率的にはだめな場合もあるからなぁ。
微妙なところだ。
PLINQとかになるとまた話は違うだろうけれど。
微妙なところだ。
PLINQとかになるとまた話は違うだろうけれど。
181デフォルトの名無しさん
2008/06/20(金) 08:43:29 >>180
from x in a select x; みたいなのを foreach(var x in a) yield return x; に変えるような
最適化だとせいぜい5%くらいしかスピード変わらない。
5%を気にしないといけない場面はそれほど多くないと思う。
ただ、a.Max(), a.Min(), a.Count() を同時に求めたいような場合、
自前で for まわして同時に求めた方が圧倒的に早い。
Parallel Extensions にはParallel.Forとかもついてるしなぁ。
PLINQでもやっぱり Max, Min, Count の問題は解消しない。
from x in a select x; みたいなのを foreach(var x in a) yield return x; に変えるような
最適化だとせいぜい5%くらいしかスピード変わらない。
5%を気にしないといけない場面はそれほど多くないと思う。
ただ、a.Max(), a.Min(), a.Count() を同時に求めたいような場合、
自前で for まわして同時に求めた方が圧倒的に早い。
Parallel Extensions にはParallel.Forとかもついてるしなぁ。
PLINQでもやっぱり Max, Min, Count の問題は解消しない。
182デフォルトの名無しさん
2008/06/20(金) 09:05:06 >>181
DryadLINQみたいにExpressionを直接扱う計算エンジンが要るね。
PLINQは所詮IEnumerableベースだし。
ttp://research.microsoft.com/research/sv/DryadLINQ/
ポテンシャルはDryadLINQ>>>>>PLINQなんだろうけど、
出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。
C# 3.0もお披露目から1年半ぐらいかかったし。
出荷までの時間短縮はお金じゃ解決しづらいんだろうな。
DryadLINQみたいにExpressionを直接扱う計算エンジンが要るね。
PLINQは所詮IEnumerableベースだし。
ttp://research.microsoft.com/research/sv/DryadLINQ/
ポテンシャルはDryadLINQ>>>>>PLINQなんだろうけど、
出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。
C# 3.0もお披露目から1年半ぐらいかかったし。
出荷までの時間短縮はお金じゃ解決しづらいんだろうな。
183デフォルトの名無しさん
2008/06/20(金) 09:07:06 >出荷までにかかる時間を考えるとPLINQ>>>DryadLINQだろうねぇ。
不等号逆だった……
ポテンシャル: DryadLINQ>>>>>PLINQ
出荷までにかかる時間: PLINQ<<<DryadLINQ
不等号逆だった……
ポテンシャル: DryadLINQ>>>>>PLINQ
出荷までにかかる時間: PLINQ<<<DryadLINQ
184デフォルトの名無しさん
2008/06/20(金) 09:10:04 >C# 3.0もお披露目から1年半ぐらいかかったし。
あとこれもお披露目から2年半の間違い。
あとこれもお披露目から2年半の間違い。
185デフォルトの名無しさん
2008/06/21(土) 10:41:48 もうちょっと落ち着いて!
186デフォルトの名無しさん
2008/06/26(木) 01:03:41 いや、勢いあったほうがよい
187デフォルトの名無しさん
2008/07/07(月) 22:42:17 複雑なXMLファイルの読み込みはXmlTextReaderよりLINQ to Xmlを使ったほうが簡潔に書けそうですか?
188デフォルトの名無しさん
2008/07/07(月) 22:53:07 書いてみろ
189デフォルトの名無しさん
2008/07/07(月) 23:23:38 >>188
一言レスって周りにも意図伝わらないからヤメレ
一言レスって周りにも意図伝わらないからヤメレ
190デフォルトの名無しさん
2008/07/07(月) 23:26:55 最近、勉強ついでにLINQtoSQL使ってるけどクラスとして扱えるだけで便利すぎ。
リレーション張っても参照のプロパティでアクセス出来るのも簡単すぎて涙が出る。
長ったらしいデータセットのクラス名で変数宣言してたら、varで省略できるのにも涙が出た。
リレーション張っても参照のプロパティでアクセス出来るのも簡単すぎて涙が出る。
長ったらしいデータセットのクラス名で変数宣言してたら、varで省略できるのにも涙が出た。
191>>188 じゃないよ
2008/07/07(月) 23:30:39192デフォルトの名無しさん
2008/07/08(火) 10:10:04 XmlElementとXElementの違いを問うならわかるが、
XmlReaderと比べるあたり自分では何も調べずに
思いつきで書き込んだと証明してるようなものだ。
XmlReaderと比べるあたり自分では何も調べずに
思いつきで書き込んだと証明してるようなものだ。
193デフォルトの名無しさん
2008/07/08(火) 23:25:23194デフォルトの名無しさん
2008/07/08(火) 23:47:33 なんか俺のせいで荒れてるみたいだな
ごめんなさい
>>192
違いの話なんかしてないっすよ?
あれからbuilderってサイトのサンプルを読んで勉強してみてる。
ちょっと興奮で震えてます。
皆ありがとう
ごめんなさい
>>192
違いの話なんかしてないっすよ?
あれからbuilderってサイトのサンプルを読んで勉強してみてる。
ちょっと興奮で震えてます。
皆ありがとう
195デフォルトの名無しさん
2008/07/09(水) 03:40:44 複雑なXMLファイルの定義によるかな。
Linq for XMLで使うXElement系のクラスはDTDやXMLスキーマをサポートしない。
構造の検査、実体やデフォルトの属性を展開することが必要という意味で複雑なXMLだったら手も足も出ない。
XDocument/XElementはXMLパーサーとしての機能をしぼっている。
簡単なXMLの読み書き加工は簡単にかつスマートに書ける、Linq for XMLはその為のもの。
XmlDocment/ElementはDOMとしてのすべての機能をもつ。多機能ではあるが何をするにも大掛かり。
XmlReader/Writerは StAX型の前方参照型で高速。
使用メモリが少なくてすみ全部メモリに読み込むのが問題になるような大きなXMLも対応できる。
扱いは当然ややこしい。
Linq for XMLで使うXElement系のクラスはDTDやXMLスキーマをサポートしない。
構造の検査、実体やデフォルトの属性を展開することが必要という意味で複雑なXMLだったら手も足も出ない。
XDocument/XElementはXMLパーサーとしての機能をしぼっている。
簡単なXMLの読み書き加工は簡単にかつスマートに書ける、Linq for XMLはその為のもの。
XmlDocment/ElementはDOMとしてのすべての機能をもつ。多機能ではあるが何をするにも大掛かり。
XmlReader/Writerは StAX型の前方参照型で高速。
使用メモリが少なくてすみ全部メモリに読み込むのが問題になるような大きなXMLも対応できる。
扱いは当然ややこしい。
196デフォルトの名無しさん
2008/07/11(金) 13:29:59 意外に使いやすいよねXmlReader/Writer
197デフォルトの名無しさん
2008/07/19(土) 20:38:17 マイクロソフト公式解説書としてLINQ本が出るってよ
LINQテクノロジ入門
http://ec.nikkeibp.co.jp/item/books/A04100.html
・07/22発売 3,360円(税込み) B5変 280P
LINQテクノロジ入門
http://ec.nikkeibp.co.jp/item/books/A04100.html
・07/22発売 3,360円(税込み) B5変 280P
198197
2008/07/27(日) 00:32:31 届いたんでぼちぼち読み始め
図表を多く使っていて、C#/VBのサンプルコードも多いのは○
内容的には結構踏み込んで丁寧に解説されていて、実際に発行されるT-SQLまで触れられてたりする。
・C#/VB・SQLに関する基本的な理解は必須。
・開発経験のない初心者が読むには少し難しい。
・何となくLINQを使っているが、使いこなせていないと感じてる人 にはおすすめ。
図表を多く使っていて、C#/VBのサンプルコードも多いのは○
内容的には結構踏み込んで丁寧に解説されていて、実際に発行されるT-SQLまで触れられてたりする。
・C#/VB・SQLに関する基本的な理解は必須。
・開発経験のない初心者が読むには少し難しい。
・何となくLINQを使っているが、使いこなせていないと感じてる人 にはおすすめ。
199デフォルトの名無しさん
2008/07/27(日) 01:55:18 LINQのProviderでしたっけ?クエリーとかを実装する側の作業についてまとまってるarticleとかってありますかね?(´・ω・`)
200デフォルトの名無しさん
2008/07/27(日) 11:06:25 >>199
単に .Select メソッド(あるいは拡張メソッド)とか実装するだけ。
LINQ to SQL みたいなことしたければ、
LINQ の勉強というよりは、Expression Trees の勉強が必要。
で、LINQ がらみの記事は結構おおいけど、
Expression Trees はあんまり見ないなぁ。
単に .Select メソッド(あるいは拡張メソッド)とか実装するだけ。
LINQ to SQL みたいなことしたければ、
LINQ の勉強というよりは、Expression Trees の勉強が必要。
で、LINQ がらみの記事は結構おおいけど、
Expression Trees はあんまり見ないなぁ。
201デフォルトの名無しさん
2008/07/27(日) 12:23:14202デフォルトの名無しさん
2008/07/27(日) 12:55:38 Expression Trees の方は、↓に多少サンプルあり。
http://ufcpp.net/study/csharp/sp3_linqreconstruct.html
LINQ to SQL みたいなことしたければ、IQueryable でググってみるといいんじゃないかと。
http://ufcpp.net/study/csharp/sp3_linqreconstruct.html
LINQ to SQL みたいなことしたければ、IQueryable でググってみるといいんじゃないかと。
203デフォルトの名無しさん
2008/07/27(日) 13:14:37 MSDNのこれも読んでおくといいかも。
ttp://msdn.microsoft.com/ja-jp/library/bb546158.aspx
ttp://msdn.microsoft.com/ja-jp/library/bb882640.aspx
ttp://msdn.microsoft.com/ja-jp/library/bb546158.aspx
ttp://msdn.microsoft.com/ja-jp/library/bb882640.aspx
204デフォルトの名無しさん
2008/08/31(日) 11:34:15 >>198
LINQの本が少ない中、この本はお薦め。
LINQを構成する基礎や、現在のバージョンで、できる事できない事、
やってはダメな事が書かれている。
.netとSQLを使って仕事している人ならLINQがどういう物か理解できる。
少なくともこの本レベルの事を理解していないと知らずに地雷を埋め込むことになる。
LINQの本が少ない中、この本はお薦め。
LINQを構成する基礎や、現在のバージョンで、できる事できない事、
やってはダメな事が書かれている。
.netとSQLを使って仕事している人ならLINQがどういう物か理解できる。
少なくともこの本レベルの事を理解していないと知らずに地雷を埋め込むことになる。
205デフォルトの名無しさん
2008/08/31(日) 18:22:46 LINQは、VSに付いてくるC#のサンプルコードだけで十分理解できるでしょ。
206デフォルトの名無しさん
2008/08/31(日) 23:44:43 LINQがこれから他のテクノロジとどう統合されてくのかよくわからん(´・ω・`)
207デフォルトの名無しさん
2008/09/01(月) 00:10:28 > どう統合されてくのか
消えていくと言う運命もあるから、俺はもう少し様子見。
消えていくと言う運命もあるから、俺はもう少し様子見。
208デフォルトの名無しさん
2008/09/01(月) 00:59:30 これだけ言語に食いこんだものが消えるというのはありえないと思うが。
209デフォルトの名無しさん
2008/09/01(月) 06:48:16210デフォルトの名無しさん
2008/09/01(月) 09:00:39 小手先の道具として便利なLINQ to objectsくらいは残るでしょ
そのほかはともかく
そのほかはともかく
211デフォルトの名無しさん
2008/09/01(月) 21:35:34 別に「残らない」なんて断定してるわけじゃないよ。
俺はなくてもあまり困ってないし、「残らない可能性もある」ので
ちょっと様子見してるだげ。
いいと思う人はどしどし使って広めてくれ。
俺はなくてもあまり困ってないし、「残らない可能性もある」ので
ちょっと様子見してるだげ。
いいと思う人はどしどし使って広めてくれ。
212デフォルトの名無しさん
2008/09/01(月) 23:25:27 LINQ便利ざんすよ?
特にLINQtoSQL。XMLはしらんがたぶん便利だろう。
今のだと出来ないこともあるけれど、出来るところのはかなり楽だ。
特にLINQtoSQL。XMLはしらんがたぶん便利だろう。
今のだと出来ないこともあるけれど、出来るところのはかなり楽だ。
213デフォルトの名無しさん
2008/09/01(月) 23:38:08 LINQ の意義の1つに、コレクションに対する操作がらみのメソッド名を統一したってのがあるから、
今後、LINQ to SQL とか LINQ to XML が廃れるようになろうとも、
コレクションとかサーバ問い合わせ系のライブラリ書く人は
おそらくほぼ LINQ の規約に従ってメソッド名を付けると思う。
そういう意味では、廃れないと思うんだが。
クエリ式とか、IQueryable を介したサーバ問い合わせとかが廃れようとも、
命名規約の部分に関しては絶対残る。
今後、LINQ to SQL とか LINQ to XML が廃れるようになろうとも、
コレクションとかサーバ問い合わせ系のライブラリ書く人は
おそらくほぼ LINQ の規約に従ってメソッド名を付けると思う。
そういう意味では、廃れないと思うんだが。
クエリ式とか、IQueryable を介したサーバ問い合わせとかが廃れようとも、
命名規約の部分に関しては絶対残る。
214デフォルトの名無しさん
2008/09/01(月) 23:43:37 MS の技術が「なくても困らない」と感じるのは、
MS がエンタープライズ相手の商売してるから、
個人で趣味で開発してる人へのアピール弱いせい。
あんまりホビープログラムでDBアプリとか書かないし。
MS がエンタープライズ相手の商売してるから、
個人で趣味で開発してる人へのアピール弱いせい。
あんまりホビープログラムでDBアプリとか書かないし。
215デフォルトの名無しさん
2008/09/02(火) 00:10:13 LINQはEntity Frameworkなんかと密接に関わるからねー
まだまだこれからの技術。
まだまだこれからの技術。
216デフォルトの名無しさん
2008/09/03(水) 00:23:39 group by ... into g select new {value1 => g.hoge, value2 => g.fuga }
みたいなLINQ書くとselect newの部分でvalue1とvalue2を生成するためにSQLサブクエリが生成されるんだけど、
これってgroup byだけで上手く書き直す方法ないんかなぁ。
というより、生成したクエリを最適化してくれる関数みたいなものはないんだろうか。
みたいなLINQ書くとselect newの部分でvalue1とvalue2を生成するためにSQLサブクエリが生成されるんだけど、
これってgroup byだけで上手く書き直す方法ないんかなぁ。
というより、生成したクエリを最適化してくれる関数みたいなものはないんだろうか。
217デフォルトの名無しさん
2008/09/03(水) 08:19:42 LINQ to SQL 自体、Entity Framework までの繋ぎの過渡技術だし、
今後 Entity Fx の側がよっぽど大ごけしないと
LINQ to SQL のグレードアップは見込めない気もする。
LINQ とは別に、SQL 文の最適化ライブラリみたいなの探す方が早いかも。
今後 Entity Fx の側がよっぽど大ごけしないと
LINQ to SQL のグレードアップは見込めない気もする。
LINQ とは別に、SQL 文の最適化ライブラリみたいなの探す方が早いかも。
218デフォルトの名無しさん
2008/09/03(水) 08:25:31 EntityFWのクエリーインターフェースとして、LINQ使われるんじゃないの?(´・ω・`)
今のLINQのEntityうんたらがもっとしっかりしたものになるということ?
今のLINQのEntityうんたらがもっとしっかりしたものになるということ?
219デフォルトの名無しさん
2008/09/03(水) 08:44:14 裏側の最適化の話ね。
同じ LINQ クエリ式を書いたときに、
実際にどういう SQL 文が発行されるかという、
実装上の最適化の部分に関して、
LINQ to SQL の今後にはあんまり期待しない方がいいんじゃないかってこと。
まだ手をつけてる人が少なくて情報少ないけども、
将来を期待したいなら LINQ to Entity Framework の方使うこと考えるのがいいんじゃないかと。
同じ LINQ クエリ式を書いたときに、
実際にどういう SQL 文が発行されるかという、
実装上の最適化の部分に関して、
LINQ to SQL の今後にはあんまり期待しない方がいいんじゃないかってこと。
まだ手をつけてる人が少なくて情報少ないけども、
将来を期待したいなら LINQ to Entity Framework の方使うこと考えるのがいいんじゃないかと。
220デフォルトの名無しさん
2008/09/03(水) 08:46:06 LINQtoSQLがせいじゅくされてLINQtoEntityになるのかとおもっとった
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 [お断り★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★2 [お断り★]
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 ★3 [Hitzeschleier★]
- 山里亮太、フィリピンに子ども食堂を建設 「偽善者」「日本の子どもを助けるべき」の声があっても活動を続ける理由 [Anonymous★]
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 [少考さん★]
- 【BBC】サッカー 滋賀県初!レイラック滋賀 悲願のJ3昇格決定 [鉄チーズ烏★]
- ( ・᷄ὢ・᷅ )博士ってイヤイヤ言っててもパンツ脱がす時には自然と腰を浮かせてきそう
- デフレ、円高👈こいつが叩かれた理由 [943688309]
- 地方都市の会社、この二種類しかないwwwwwwwwwwwwww
- 残クレ自転車 チャリファード
- 【悲報】ココナッツサブレ、なぜか売り切れ続出する🤔 [733893279]
- 彼女がオホ声出すタイプなんだけど引いてる…どうすればいい?
