0

IDでリンクされたDBML生成クラスがいくつかあります。

ClassA {
    AID,
    XID,
    Name
}

ClassB {
    AID,
    ExtraInfo,
    ExtraInfo2
}

のようなものを使用しdb.ClassAs.Where(XID == x)てその結果を反復すると、各 ClassA と各 ClassB に対してクエリを実行することになりますが、これは低速です。

または、気にExecuteQueryなるすべての情報をフェッチして ClassA を返そうとしました。それを繰り返すと、同じことをすることになります。つまり、多くの個々のフェッチを1回だけ行うことになります。両方のClassAの関心のあるフィールドを持つClassC(DBエンティティに関連付けられていない)に保存するとおよび ClassB の場合、このクエリははるかに高速ですが、面倒です b/c 不要な ClassC を IMO で作成しました。

ClassB に関連付けられている ClassA を引き続き使用ExecuteQueryし、1 つのクエリと A*B の数のクエリを実行するにはどうすればよいですか?

4

1 に答える 1

0

関連付けがある場合は、ExecuteQuery() を使用する必要はありません。

以下は、架空の Book Library コンテキストと結果の匿名型を使用した例です。

var results = 
    Books
    .Where(book => book.BookId == 1)
    .Select(book =>
        new
        {
            book.Name,
            AuthorName = book.Author.Name,  //Is a field in an associated table.
            book.Publisher, //Is an associtated table.
        });

編集:アノンタイプなし

var results = 
        Books
        .Where(book => book.BookId == 1)
        .Select(book =>
            new BookResult()
            {
                BookName = book.Name,
                AuthorName = book.Author.Name,  //Is a field in an associated table.
                Publisher = book.Publisher, //Is an associtated table.
            });
于 2010-07-06T23:16:30.090 に答える