1

所以我需要在GroupJoin上設置Join。我搜索了很多關於我的問題的答案,但我找不到它。實體框架6使用lambda加入groupjoin

在數據庫中我有模板。我選擇一個帶有表格的模板,並與其中的項目進行連接。還有一個表格,其中有一行或多行文件鏈接到該項目,這是我使用的GroupJoin。這個工作,但現在的問題是,我需要調用表與文件鏈接到表(並且總是1不多)。

對於到目前爲止,我有這跟在一個羣組加入加入,但加入是不工作:

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

DataItemFiles可變這裏

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

實際上是IEnumerable<anonymous_type>其中anonymous_type是以前Join操作new { DataItemFiles, DataTemplateUploads }(順便說一句,你應該用單數形式對大多數的名字的結果,這真的很難跟隨哪一個是單一的,哪一個是序列)。

因此得到你需要使用投影(Select)的各個部分:

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

我不確定你的意思與:(順便說一句,你應該使用單數形式的大多數名稱,這是很難遵循哪一個是單一的,哪一個是序列)。但你的答案是有效的 – Devo