0

我有几个 DBML 生成的类,它们通过 id 链接在一起,例如

ClassA {
    AID,
    XID,
    Name
}

ClassB {
    AID,
    ExtraInfo,
    ExtraInfo2
}

在使用类似的东西db.ClassAs.Where(XID == x)并遍历该结果时,它最终会为每个 ClassAs 和每个 ClassB 执行查询,这很慢。

或者,我尝试使用它ExecuteQuery来获取我关心的所有信息并让它返回一个 ClassA。在迭代它时,我最终会做同样的事情,即做很多单独的提取而不是 1。如果我将它存储在一个 ClassC(与 DB 实体无关)中,它具有两个 ClassA 感兴趣的字段和 ClassB,这个查询要快得多,但它很烦人 b/c 我刚刚创建了 IMO 一个不必要的 ClassC。

我怎样才能仍然使用与 ClassB 关联的 ClassA,并且仍然使用ExecuteQuery运行 1 个查询与 A*B 数量的查询?

4

1 回答 1

0

如果您有关联,不需要使用 ExecuteQuery()。

这是一个使用一些虚构的书库上下文和匿名类型作为结果的示例:

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 回答