Вы используете EF полностью неправильно.
То, что вы хотите на самом деле
Если ResourceDetails имеет один ресурс и каждый reasource имеет один элемент (маловероятно).
var query = _context.ResourceDetails
.Include(d => d.Resource)
.Include(r => r.Resource.Memberpoints)
.Where(d => d.Resource.Memberpoints.MemberId == 1);
Если ResourceDetails имеет один ресурс, и каждый ресурс может иметь несколько членов.
var query = _context.ResourceDetails
.Include(d => d.Resource)
.Include(r => r.Resource.Memberpoints)
.Where(d => d.Resource.Memberpoints.Any(m => m.MemberId == 1));
Если ResourceDetails имеет несколько ресурсов (маловероятно), и каждый ресурс может иметь несколько членов.
var query = _context.ResourceDetails
.Include(d => d.Resource)
.Include(r => r.Resource.Memberpoints)
.Where(d => d.Resource.Any(r => r.Memberpoints.Any(m => m.MemberId == 1)));
Хорошо. Так как насчет того соединения, которое вы хотели? Хорошо, что это работа ORM. Картирование ORM уже знает, как ResourceDetails
связаны с Members
.
В чем была эта ошибка?
Ну, сигнал IQueryable.Where()
принимает Func<T, bool>
и возвращает IQueryable<T>
.
Так что в вашем примере внутренний Where
неверен, потому что вы даете ему Func<T, int>
. Исходный Where
ошибочен, потому что вы передаете ему IQueryable<T>
(хотя компилятор не знает этого, потому что его все еще не так).
TL: DR
В общем, не вступайте с EntityFramework/Linq. EF должен иметь ассоциации в сопоставлениях и уже знает, как объединить сущности вместе.
Не уверен, что это сработает, поскольку вы сравниваете равенство между одним идентификатором и коллекцией Memberpoints. –
Это будет, если MemberPoint.MemberId уникален. Но я удалю ответ, если заявлено OP – agentpx