1

したがって、GroupJoinにJoinを設定する必要があります。私は私の問題についての答えを見つけるために多くのグーグルを見つけましたが、私はそれを見つけることができません。エンティティフレームワーク6がラムダを使用してgroupjoinに参加

データベースにはテンプレートがあります。私は、テーブルに項目を結合したテンプレートを選択します。また、アイテムにリンクされたファイルを含む1つまたは複数の行を持つテーブルがあります。これは私が使用するGroupJoinです。それは1つの作品が、今問題は、私はテーブルを呼び出す必要があります(そして、それは常に1つ以上です)は、ファイルとテーブルにリンクされています。これまでのところ、私はgroupjoinに参加して、これを持っているが、それは参加のために

はまったく機能していません。

DataBundle = _context.DataTemplates.Join(_context.DataItems, DataTemplates      => DataTemplates.Id, DataItems => DataItems.DataTemplateId, (DataTemplates, DataItems) => new { DataTemplates, DataItems }) 
           .GroupJoin(_context.DataItemFiles.Join(_context.DataTemplateUploads, DataItemFiles => DataItemFiles.DataTemplateUploadId, DataTemplateUploads => DataTemplateUploads.Id, (DataItemFiles, DataTemplateUploads) => new { DataItemFiles, DataTemplateUploads }), x => x.DataItems.Id, x => x.DataItemFiles.DataItemId, (x, DataItemFiles) => new { x.DataItems, x.DataTemplates, DataItemFiles }) 
           .Where(x => x.DataTemplates.CallName == CallName).Where(x => x.DataItems.WebsiteLanguageId == WebsiteLanguageId) 
           .Select(x => new DataBundle() 
           { 
            DataItemFiles = x.DataItemFiles, //error 
            DataItemResources = null, 
            DataItems = x.DataItems, 
            DataTemplateFields = null, 
            DataTemplates = x.DataTemplates, 
            DataTemplateUploads = x.DataTemplateUploads, //can't find, because DataTemplateUploads is linked to DataItemFiles 
           }).ToList(); 

public class DataBundle 
{ 
    public IEnumerable<DataItemFiles> DataItemFiles { get; set; } 
    public IEnumerable<DataItemResources> DataItemResources { get; set; } 
    public DataItems DataItems { get; set; } 
    public IEnumerable<DataTemplateFields> DataTemplateFields { get; set; } 
    public DataTemplates DataTemplates { get; set; } 
    public IEnumerable<DataTemplateUploads> DataTemplateUploads { get; set; } 
} 

誰かがこの問題を解決する方法を知っていますか?

+0

あなたの問題を支援するためのコード例データセットを提供してください。ボールを回転させて質問を解決するリンクの例を次に示します。https://msdn.microsoft.com/en-us/library/bb534297(v=vs.110).aspx – Programmer

答えて

1

(x, DataItemFiles) => new { x.DataItems, x.DataTemplates, DataItemFiles } 

ここDataItemFiles変数が実際にanonymous_typeが前Joinオペレータnew { DataItemFiles, DataTemplateUploads }の結果である(ところで、あなたはそれがどちらに従うことは本当に難しいですが、名前のほとんどのために単数形を使用する必要がありますIEnumerable<anonymous_type>です単一であり、どちらがシーケンスであるか)。

は、したがって、あなたが投影( Select)を使用する必要があり、個々の部品を入手します

.Select(x => new DataBundle() 
{ 
    DataItemFiles = x.DataItemFiles.Select(y => y.DataItemFiles), 
    // ... 
    DataTemplateUploads = x.DataItemFiles.Select(y => y.DataTemplateUploads), 
    // ... 
} 
+0

あなたは何を意味するのか分かりませんと:(btw、あなたはほとんどの名前のために単数形を使うべきです、どちらが単一で、どれが1つの順序であるかに従うのは本当に難しいです)。しかし、あなたの答えが働く – Devo

関連する問題