[英]Entity Framework Core join & include inner entities
List<Item> Item = (from it in _context.Item
join iv in _context.ItemVersions on it.Id equals iv.ItemId
join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId
where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) ||
queryable.Any(x => iot.Value.Contains(x.SearchText)))
select new Item
{
Id = it.Id,
Name = it.Name,
TypeCodeId = it.TypeCodeId,
TypeCode = it.TypeCode,
OriginalLangId = it.OriginalLangId,
SubGenreCodeId = it.SubGenreCodeId,
ItemVersions = it.ItemVersions
}
).Include("ItemVersions.OriginalTitles").ToList();
如您所见,我正在尝试将OriginalTitles
添加到ItemVersions
实体,但无法做到这一点( OriginalTitles
始终为null
)。 项目 model:
public class Item
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public int TypeCodeId { get; set; }
public TypeCodes TypeCode { get; set; }
public int? OriginalLangId { get; set; }
public int SubGenreCodeId { get; set; }
public List<ItemVersion> ItemVersions { get; set; }
}
和我的 ItemVersions model:
public class ItemVersion
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public List<ItemOriginalTitle> OriginalTitles { get; set; }
public List<ItemShortTitle> ShortTitles { get; set; }
public List<ItemSynopsis> ItemSynopsis { get; set; }
public List<ItemLongSynopsis> ItemLongSynopsis { get; set; }
public List<ItemLanguage> ItemLanguages { get; set; }
public List<VersionChannel> VersionChannels { get; set; }
public bool IsDefault { get; set; }
public Item Item { get; set; }
public int ItemId { get; set; }
}
如果可能的话,寻找一种立即包含它的方法,而无需对其进行迭代。 谢谢
尝试(将Include
方法移至join
子句,其中选择了表):
List<Item> Item = from it in _context.Item
join iv in _context.ItemVersions.Include("OriginalTitles") on it.Id equals iv.ItemId
join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId
where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) ||
queryable.Any(x => iot.Value.Contains(x.SearchText)))
select new Item
{
Id = it.Id,
Name = it.Name,
TypeCodeId = it.TypeCodeId,
TypeCode = it.TypeCode,
OriginalLangId = it.OriginalLangId,
SubGenreCodeId = it.SubGenreCodeId,
ItemVersions = it.ItemVersions
};
因为我初始化了一个新的 object,所以我包含了内部实体并不重要。 我的解决方案是返回 db object 并将包含移动到它:
Item = (from it in _context.Item.Include("ItemVersions.OriginalTitles")
join iv in _context.ItemVersions on it.Id equals iv.ItemId
join iot in _context.ItemOriginalTitles on iv.Id equals iot.ItemVersionId
where term.ToLower() == "all" || (it.Name.ToLower() == term.ToLower() || it.Name.ToLower().Contains(term.ToLower()) || iot.Value.Contains(term) ||
queryable.Any(x => iot.Value.Contains(x.SearchText)))
select it
).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.