0

外部キー関係のない 2 つのテーブル (Document と Message) がありますが、テーブル Message には Document の id 列が列として含まれています (悪い設計、私は知っています..)

テーブル ドキュメント: DocId、名前

表メッセージ: MessageId、DocId、Value

1 つのドキュメント オブジェクトは 0 個以上の 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 に答える