Итак, я использую Entity Framework начиная с версии 4, и недавно в проекте, который я делал, произошли серьезные изменения. Достаточно сказать, что я использую EF для получения разницы от одной базы данных к другой в процессе ETL с EF core 3.1.2, который был EF Core 2.2.6. Часть, которая сейчас ломается, имеет код, подобный следующему.
var setOne = await 1stContext.table.Where(x => x.DateModified >= inputDate)).Select(x => new { x.UserId, x.RoleId, x.UniversityId }).ToListAsync();
var toRemove = 2ndContext.table.Where(x => setOne.Contains(new { x.UserId, x.RoleId, x.UniversityId })).ToList();
Имеет анонимную проекцию 'new {(items)}', которая используется, но теперь она взрывается. Я попытался привести к именованному кортежу, который был новым с C# 7, но вы не можете сделать это в дереве выражений в соответствии с компилятором. Так есть идеи по-новому? Может быть, просто сделать linq join или подобное? Моя идея всегда заключалась в том, чтобы сначала выполнить условие where, прежде чем реализовывать данные, чтобы эквивалент sql не давал мне все результаты, а затем go над ними.
ОБНОВЛЕНИЕ Вот простой экран печати без ef о чем я Я делал это все время с очень широкими наборами, которые я хотел сделать только меньший набор, а затем найти его. Я мог бы сделать соединение, но ключ в том, что если вы посмотрите на мое второе утверждение, я еще не проецирую на реальный объект с 'toList', и если бы я это сделал, я потерял бы способность получить объекты, которые я хотел удалить потенциально. Я мог бы сделать соединение, но я просто не хочу делать дорогие звонки в базу данных, чтобы получить все и затем фильтр. Но соединение может работать. Я, вероятно, поиграю с этим завтра на работе, но просто хотел, чтобы это было здесь, если бы кто-нибудь знал.
![enter image description here](https://i.stack.imgur.com/8h94w.png)