Таблица A
a_id (PK)
aid_code
aid_desc
a_id | aid_code | aid_desc
---- -------- --------
1301 | FN | FAN
1302 | PN | PAN
1303 | LN | LAN
-> Таблица A имеет один первичный ключ одного столбца.
Таблица B
b_id (PK)
b_enddate (PK)
a_id (PK)
b_dob
b_name
code (not mapped property)
-> Таблица B имеет составной первичный ключ с использованием 3 столбцов.
b_id | b_endate | a_id | b_dob | b_name
---- --------- ---- ---------- ------
1 | 01/01/2020 | 1301 | 01/01/2017 | sam
1 | 10/02/2020 | 1302 | 02/01/2016 | ham
2 | 01/10/2022 | 1303 | 03/01/2016 | jam
3 | 11/10/2023 | 1302 | 05/01/2015 | bam
Существует универсальный репозиторий c, который обрабатывает только один класс сущностей для каждой таблицы A и таблицы B.
var a = context.GetRepository<A>();
var b = context.GetRepository<B>();
Потребитель будет вызывать API следующим образом: {apiroute}/?id=1&code=FN
Я должен фильтровать по идентификатору, который является значением столбца b_id в TableB, и кодом, который является значением столбца aid_code в таблице A, но только в TableB имеет значение столбца a_id из таблицы A.
Я добавил дополнительное не сопоставленное свойство, которое говорит Code
в сущности таблицы B для хранения значения для aid_code из таблицы A, и сделал соединение между API-интерфейсом Entity и Entity B. I ' m создание динамического c объекта с использованием select new EntityB{ code = entityA.aid_code, ..... }
var records = from a in entityA
join b in entityB on b.a_id equals a.a_id
select new EntityB{ b_id = b.b_id, b_enddate = b.b_enddate, code = entityA.aid_code, ..... }
Возвращаемый тип должен быть IQueryable<EntityB>
, как я делаю ToList()
позже.
Мне нужно выполнить фильтрацию к концу, подготовив каскадное предложение where, но не применимо фильтрование по предложению where. И он выполняет объединение таблиц A и B, игнорируя предложение where, которое выполняется вечно.
Что я делаю не так?