4

私はこの同様の質問をここで見ましたが、デカルト積の望ましい結果の状況で含むを使用する方法を理解できません:

LINQ To SQL 例外: ローカル シーケンスは、Contains 演算子を除くクエリ演算子の LINQ to SQL 実装では使用できません

私が以下を持っているとしましょう:

var a = new [] { 1, 4, 7 };
var b = new [] { 2, 5, 8 };

var test = 
        from i in a
        from j in b
        select new {
            A = i,
            B = j,
            AB = string.Format("{0:00}a{1:00}b", i, j),
        };

foreach (var t in test)
    Console.Write("{0}, ", t.AB);

これはうまく機能し、次のようなダンプが得られます (注、デカルト積が必要です)。

01a02b, 01a05b, 01a08b, 04a02b, 04a05b, 04a08b, 07a02b, 07a05b, 07a08b,  

今、私が本当に望んでいるのは、これとデカルト積を、私が持っているデータベース テーブルの ID に対して再度取得することです。しかし、オブジェクトを参照する代わりに SQL テーブルを参照する from 句をもう 1 つ追加するとすぐに、エラーが発生します。したがって、上記のように db が新しい DataContext (つまり、System.Data.Linq.DataContext から派生したクラス) として定義されているように変更します。

var a = new [] { 1, 4, 7 };
var b = new [] { 2, 5, 8 };

var test = 
        from symbol in db.Symbols
        from i in a
        from j in b
        select new {
            A = i,
            B = j,
            AB = string.Format("{0}{1:00}a{2:00}b", symbol.ID, i, j),
        };

foreach (var t in test)
    Console.Write("{0}, ", t.AB);

私が得るエラーは次のとおりです。

ローカル シーケンスは、Contains 演算子を除くクエリ演算子の LINQ to SQL 実装では使用できません。

これは明らかにContainsを使用しないことに関連していますが、結果を実際に制限したくない場合にContainsがどのように使用されるかはわかりません-状況にデカルト積が必要です。データベースとローカル シーケンスを結合するときに、上記の [Contains] を使用してデカルト積を生成する方法についてのアイデアはありますか?

4

1 に答える 1

6

ToListまたはを使用できますAsEnumerable

var test = 
        from symbol in db.Symbols.AsEnumerable()
        from i in a
        from j in b
        select new {
            A = i,
            B = j,
            AB = string.Format("{0}{1:00}a{2:00}b", symbol.ID, i, j),
        };
于 2010-05-14T20:11:01.687 に答える