I am using the following in an attempt to locate a single member record associated with a specific organisation;
var dataRow = db.Organisation
.Include(x => x.Member.Select(m => m.Guid == MemberGuid))
.Where(x => x.Guid == OrganisationGuid)
.FirstOrDefault();
However this throws the following error;
"The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. Parameter name: path"
The Include path is valid and if I take out ".Select(m => m.Guid == model.MemberGuid)" it returns a collection of members for the organisation which I then have to process to locate the required member.
Is there a way to locate the specific member without returning the whole collection?
There are two mistakes in your query. First, you are trying to use .Select
to filter the records, you will only get true/false
records in the column. You should use .Where
instead. Second, .Include
accepts a navigation property, not the query.
var dataRow = db.Organisation
.Include(x => x.Member)
.Where(x => x.Member.Guid == MemberGuid && x.Guid == OrganisationGuid)
.FirstOrDefault();
An alternative solution is using join:
var dataRow = (from o in db.Organisation
join m in db.Member
on o.MemberGuid equals m.MemberGuid
where o.Guid == OrganisationGuid && m.Guid == MemberGuid
select o).FirstOrDefault();