0

我有 2 个没有外键关系的表(文档和消息),但是表消息将文档中的 id 列作为一列(糟糕的设计,我知道..)

表文档:DocId、名称

表消息:MessageId、DocId、Value

一个文档对象可以有零个或多个 Message 对象

我想编写一个返回名为 DocumentWithMessages 的聚合对象列表的查询:

public class DocumentWithMessages
{
Document Document {get;set;}
List<Message> Messages {get;set;}
}

查询应返回所有文档(有或没有消息列表)

我开始编写这样的方法,但它给了我一个例外:

public ICollection<DocumentWithDocumentSplitMessages> GetSplitJobsWithMessages()
        {
            var messages = (from dm in ObjectContext.DocumentSplitMessages select dm).ToList();
            var jobs = from d in ObjectContext.Documents                       

                       let msgs = messages.Where(dm => dm.DocID == d.DocID).ToList()

                       select new DocumentWithDocumentSplitMessages()
                           {
                               Document = d,
                               DocumentSplitMessages = msgs
                           };                                    

            return jobs.ToList();
        }

例外是:

System.NotSupportedException:LINQ to Entities 无法识别方法 'System.Collections.Generic.List 1[BraArkivDataModel.DocumentSplitMessage] ToList[DocumentSplitMessage](System.Collections.Generic.IEnumerable1[BraArkivDataModel.DocumentSplitMessage])' 方法,并且此方法无法转换为存储表达式。

我该如何编写这样的查询?

4

1 回答 1

1

我认为您可以使用类似于您尝试过的方法,但在 let 子句上使用IQueryable :

var jobs = from d in ObjectContext.Documents                       

           let msgs = ObjectContext.DocumentSplitMessages.Where(dm => dm.DocID == d.DocID)

           select new DocumentWithDocumentSplitMessages()
           {
               Document = d,
               DocumentSplitMessages = msgs
           };                                    

        return jobs.ToList();
于 2012-08-21T09:39:48.297 回答