Запрос архаичной БД с структурой сущностей - PullRequest
0 голосов
/ 21 июня 2019

Я унаследовал очень старую БД, и я только начинаю с .NET Core 3 (предварительный просмотр), чтобы посмотреть, смогу ли я создать проверенное WebApi, которое использует EF Core для запроса к БД.

Так что моя проблема в том, что в этой БД большая часть данных не обрезана (поэтому вокруг значений много пробелов). Существует смесь полей varchar (n) и char (n). И нет, я не в состоянии перестроить это.

Таким образом, моя проблема заключается в том, что WebApi получит запрос, который будет содержать список , и мне нужно вернуть все соответствующие данные об этих людях.

Если бы я делал это в SQL, думаю, я бы сделал что-то вроде:

SELECT * 
FROM Table1
INNER JOIN Table2
ON RTRIM(LTRIM(Table1.[P1])) = RTRIM(LTRIM(Table2.[P9]))

Мне нужно иметь возможность сделать что-то подобное, используя Entity Framework, где я присоединяюсь к таблице БД с помощью .NET List . Тем не менее, я а) не уверен, как лучше сделать это с необходимыми усечениями, и б) количество строк в этой БД очень велико, и поэтому это должна быть операция на основе множеств, выполняемая на SQL Server - я не могу вернуть все обратно в БД и присоединиться в памяти.

[РЕДАКТИРОВАТЬ (24 июня)]

Чтобы добавить несколько примеров того, что я пробовал, и перефокусировать вопрос на подход, который я должен использовать:

1 - я попытался сделать это с помощью JOIN

var y = from a in query
    join b in request.Items 
    on new { a.Prop1, a.Prop2 } equals new { b.Prop1, b.Prop2 }
    select new { a.Prop1, a.Prop2, a.Prop3 };

return await y.ToListAsync().ConfigureAwait(false);

Возвращена ошибка компиляции:

Неверно указан тип одного из выражений в предложении соединения. Ошибка вывода типа при вызове «Join».

Не знаю почему, но я подозреваю, что это потому, что я пытаюсь соединить строки с полями символов БД.

Также пробовал:

var y = from a in query
    from b in request.Items
    where a.Prop1 == b.Prop1 && a.Prop2 == b.Prop2
    select new {a.Prop1, a.Prop2, a.Prop3};
return await y.ToListAsync().ConfigureAwait(false);

Компилируется, но выдает ошибку во время выполнения:

System.InvalidOperationException: 'селектор коллекции не был NavigationExpansionExpression '

Итак, да, мне нужно иметь возможность убедиться, что я обрезаю данные при выполнении "соединения", но я думаю, что основная проблема заключается в том, что это должна быть операция на стороне сервера (из-за размер наборов данных), но я бы сделал соединение с таблицей БД по списку в памяти на клиенте.

Не уверен, что лучший подход здесь (с EF Core 3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...