У меня есть одна проблема.Entity Framework Linq для сопоставления объектов
Database Шма
==================
|parts |
==================
| partId |textId |
==================
========================
texts |
========================
|TextId|LanguageId|text|
========================
============================
languages |
============================
|LanguageId|LanguageIsoCode|
============================
Я хочу, чтобы отобразить этот результат к следующему объекту
public long PartId { get; set; }
public Dictionary<string,string> Name { get; set; }
например.
{
PartId: 32020
Name: {["en": "Blah", "es": "Blah2"]}
}
это то, что я пробовал, но Im работает в TimeOut с этим запросом.
var query = (from p in _context.epc_parts
select new //select first dynamic object
{
PartId = p.PartID,
Code = p.PartName,
Name = (from trans in _context.epc_texts
join lang in _context.epc_languages on trans.LanguageID equals lang.LanguageID
where p.TextID == trans.TextID
select new
{
LanguageId = lang.shortname.ToLower(),
Caption = trans.Caption
})
}).AsEnumerable().Select(x => new SearchPartModel //transform it here when we can use dictionary
{
Code = x.Code,
PartId = x.PartId,
Name = x.Name.ToDictionary(t => t.LanguageId, t => t.Caption)
});
Таблица деталей содержит около 60 тыс. Строк для каждой строки, имеется 7 переводов. Свойства навигации не могут использоваться, потому что Shema не использует внешние ключи, а модель создается из db.
Почему вы используете 'AsEnumerable()' вместо 'ToList()' Я считаю, что если вы делаете ToList, он выполнит запрос, и преобразование будет выполняться в памяти. Поправьте меня если я ошибаюсь. Также попробуйте использовать 'NavigationProperty' вместо соединения – Eldho
Сколько записей вы ожидаете? – Eldho
Ну нет фильтра/условия, поэтому вы в основном загружаете всю схему, которую вы представили. Если это веб-страница и есть много данных, тайм-аут не является неожиданным. –