По умолчанию Entity Framework вводит только указанную коллекцию без каких-либо посторонних объектов. Если у вас включена отложенная загрузка, доступ к внешним свойствам приведет к их ленивой инициализации. Если нет, вам нужно будет указать платформе управления данными, чтобы они с готовностью загрузили нужные вам свойства в первом пакете.
Есть два способа сделать это. Первый - это «официальный» способ, но мне он не нравится, потому что он использует магические строки:
var list = _entities.LocalizationGlobalTexts.Include("ForeignProp")
.Where(l => l.Language.Id == _currentlanguage)
.ToList<LocalizationGlobalText>();
(Замените «ForeignProp» на имя свойства, которое вы хотите загружать с нетерпением)
Второй способ - настроить ваш селектор так, чтобы он был вынужден извлекать эти дополнительные данные в:
var list = _entities.LocalizationGlobalTexts
.Where(l => l.Language.Id == _currentlanguage)
.Select(l => new {l, l.ForeignProp})
.ToList();
foreach(var item in list)
{
Console.WriteLine(item.l.Name + item.ForeignProp.Title);
}
Поскольку Entity Framework достаточно умен, чтобы устанавливать соответствующие соединения, вы можете включить еще один селектор и впоследствии избежать использования анонимного типа:
var list = _entities.LocalizationGlobalTexts
.Where(l => l.Language.Id == _currentlanguage)
.Select(l => new {l, l.ForeignProp})
.AsEnumerable() // tells EF to load now. The rest is LINQ to Objects
.Select(i => i.l)
.ToList();
foreach(var localization in list)
{
Console.WriteLine(localization.Name + localization.ForeignProp.Title);
}