Я унаследовал очень старую БД, и я только начинаю с .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).