ExecuteQuery是否可以返回DBML生成的类而无需获取该类的所有信息?

时间:2010-07-02 18:11:42

标签: linq executequery

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

ClassA {
    AID,
    XID,
    Name
}

ClassB {
    AID,
    ExtraInfo,
    ExtraInfo2
}

使用类似db.ClassAs.Where(XID == x)的内容并迭代结果, 它最终会为每个ClassA和每个ClassB执行查询,这很慢。

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

我如何仍然使用与ClassB关联的ClassA,仍然使用ExecuteQuery运行1个查询而不是A * B个查询?

1 个答案:

答案 0 :(得分: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.
            });