所以我需要在GroupJoin上设置Join。我已经google了很多,以找到我的问题的答案,但我找不到它。
在数据库中我有模板。我选择一个模板,其中一个表与项目连接。还有一个包含一行或多行的表,其中的文件链接到该项,即我使用的GroupJoin。那个工作,但现在的问题是,我需要调用表与文件链接到表(并且总是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 :(得分:1)
DataItemFiles
变量
(x, DataItemFiles) => new { x.DataItems, x.DataTemplates, DataItemFiles }
实际上是IEnumerable<anonymous_type>
,其中anonymous_type
是前一个Join
运算符new { DataItemFiles, DataTemplateUploads }
的结果(顺便说一句,对于大多数名称,你应该使用单数形式,它是&#39} ;真的很难理解哪一个是单一的,哪一个是序列)。
因此,为了获得您需要使用投影(Select
)的各个部分:
.Select(x => new DataBundle()
{
DataItemFiles = x.DataItemFiles.Select(y => y.DataItemFiles),
// ...
DataTemplateUploads = x.DataItemFiles.Select(y => y.DataTemplateUploads),
// ...
}