У меня есть проект, который использовал DBML в качестве ORM для получения данных из нашей базы данных. Мы находимся в процессе замены этого DBML на Entity Framework Core 2.2.6 (к сожалению, самая последняя версия, которую мы можем использовать, поскольку мы должны поддерживать старый. Net 4 кода платформы).
У меня есть блок LINQ, который работал с использованием старого кода DBML, но не работает в платформе EF Core 2.2.6. Я получаю сообщение об ошибке:
Невозможно найти сопоставление с реляционным типом для типа CLR 'Expression []'.
List<datadictproperty> dprop = (from dd in dBConnection.datadictproperties
where
dd.entityid == ent.id &&
dd.clientid == clientid &&
((((dd.suppress <= emp.seclevel &&
dd.suppress != Constants.g_everyone_seclevel) ||
dd.suppress == null)) || ignoreSecLevel) ||
(!
(from d in dBConnection.datadictproperties
where
d.entityid == ent.id &&
d.clientid == clientid &&
d.name == dd.name
select new
{
d.name
}).Contains(new { dd.name }) &&
dd.entityid == ent.id &&
dd.clientid == null &&
((((dd.suppress <= emp.seclevel &&
dd.suppress != Constants.g_everyone_seclevel) ||
dd.suppress == null)) || ignoreSecLevel))
orderby
dd.name
select dd).ToList();
One Я могу добавить, что это может упростить то, что следующий оператор должен возвращать ноль или одну строку, так что FirstOrDefault () может работать. На данный момент он возвращает анонимный тип List<T>
.
(from d in dBConnection.datadictproperties where
d.entityid == ent.id &&
d.clientid == clientid &&
d.name == dd.name
select new
{
d.name
})
Часть утверждения, которое, по моему мнению, не работает, заключается в следующем:
d.name == dd.name
select new
{
d.name
}).Contains(new { dd.name })
Моя проблема заключается в том, что Я не могу понять, как изменить этот код, чтобы правильно получать те же данные, используя технологию EF Core 2.2.6.
Есть ли кто-нибудь, кто мог бы дать мне несколько идей относительно того, как я могу изменить этот код для создания те же данные и, следовательно, не генерировать ошибку времени выполнения, упомянутую выше?
Любая помощь будет принята с благодарностью:)