I have two models, Benefit and SchemeName
Benefit –
[Key]
public int BenefitID { get; set; }
public string BenefitName { get; set; }
public string BenefitDescription { get; set; }
public virtual ICollection<SchemeName> SchemeNames { get; set; }
SchemeName
[Key]
public int SchemeNameID { get; set; }
public string Name { get; set; }
public virtual ICollection<Benefit> Benefits { get; set; }
This has created three tables in the database Benefits, SchemeNames and a joining table called SchemeNameBenefits.
I am trying to populate a droplownlist that contains only the SchemeNames associated with a certain Benefit but am not sure how I can do this, can I reference the join table in my code?
I started with the following (which returns all SchemeNames)
private void PopulatePensionSchemeName(object selectedPensionSchemeName = null)
{
var schemeNameQuery = from d in db.SchemeNames
orderby d.SchemeNameID
select d;
ViewBag.PensionSchemeNameID = new SelectList(schemeNameQuery, "SchemeNameID", "Name", selectedPensionSchemeName);
}
But I’m not sure how I can add this clause. Any pointers?
You’ll need the key of the Benefit object you want the SchemeNames for. The query you’re probably looking for is:-
Or in the extension method syntax:-
Which produces the following SQL:-
Alternately you can use:-
This produces the following SQL:-
Note that in both cases the generated SQL references your junction table even though it isn’t part of your EF model.
If you already have the Benefit object, of course, you can get its SchemeNames more simply by using:-