[.NET] フィードバック - [LINQ to SQL] 自動生成された SQL 文が不適切なために、 例外が発生することがある
IIJIMAS さんに思い出させてもらったので。 f(^^;
ひさびさに、 MS Connect へバグレポート。
> ID = 413928
> [LINQ to SQL] 自動生成された SQL 文が不適切なために、 例外が発生することがある
ようするに、 ヘタな LINQ 式を書くと、 "~ WHERE ~ IN ( … "ってカタチの SQL 文が生成されちゃって、 で、 "IN ( …" の中身が多いと例外が出ちゃう、 っていう現象。
LINQ to SQL が発行した SQL を全部チェックしとけ、 って話になっちゃうなら、 最初から SQL をベタ書きするよね。
ってことで、 皆様 vote よろしくです~ m(_`_)m
なお、 フィードバックに添付したファイルは、 テストコードです。 テストその2 として、 ちゃんと動く ( そして効率もいい ) コードも載せてあります。 …あ、 ここにも載せておこう。
[TestMethod]
public void TestMethod2() {
using (AdventureWorksDataContext dc
= new AdventureWorksDataContext(CONN_STRING)) {
dc.Log = System.Console.Out;
// 明細行のどれかに 4個以上の注文を持つ、 注文伝票の ID
IQueryable<int> q1 = dc.SalesOrderDetail.Where(v => v.OrderQty > 3).Select(m => m.SalesOrderID).Distinct();
Assert.IsTrue(2100 < q1.Count()); // <= 私の環境では 2401件あった。
// 該当する注文を出した顧客の ID
IQueryable<int> q2 = dc.SalesOrderHeader.Where(v => q1.Contains(v.SalesOrderID)).Select(m => m.CustomerID).Distinct();
Assert.AreEqual(467, q2.Count()); // <= 私の環境では 467件あった。
}
}
けっきょく、 できるだけ IQueryable<> のまま引きまわしてよ、 ってことなんですけど。
慣れないうちは、 どうしてもすぐ .ToList() しちゃいたくなるんだよね~ f(^^;
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント