« 暗号化したつもり、 パスワード付き ZIP ファイル添付のメール | トップページ | Small Basic v0.3 リリース »

2009年2月12日 (木)

[.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(^^;

|

« 暗号化したつもり、 パスワード付き ZIP ファイル添付のメール | トップページ | Small Basic v0.3 リリース »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET] フィードバック - [LINQ to SQL] 自動生成された SQL 文が不適切なために、 例外が発生することがある:

« 暗号化したつもり、 パスワード付き ZIP ファイル添付のメール | トップページ | Small Basic v0.3 リリース »