model-view-controllerlambdanerddinner

Simple MVC NerdDinners Lambda


In this code from Microsoft's MVC Tutorial NerdDinners:

public class DinnerRepository {

private NerdDinnerDataContext db = new NerdDinnerDataContext();

//
// Query Methods

public IQueryable<Dinner> FindAllDinners() {
    return db.Dinners;
}

public IQueryable<Dinner> FindUpcomingDinners() {
    return from dinner in db.Dinners
           where dinner.EventDate > DateTime.Now
           orderby dinner.EventDate
           select dinner;
}

public Dinner GetDinner(int id) {
    return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}

//
// Insert/Delete Methods

public void Add(Dinner dinner) {
    db.Dinners.InsertOnSubmit(dinner);
}

public void Delete(Dinner dinner) {
    db.RSVPs.DeleteAllOnSubmit(dinner.RSVPs);
    db.Dinners.DeleteOnSubmit(dinner);
}

//
// Persistence 

public void Save() {
    db.SubmitChanges();
} 

}

What does:

public Dinner GetDinner(int id) {
    return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}

the "d" mean? How does this code work? I know it it bringing back dinners where dinnerid matches id from the function parameter. I don't understand the "d goes to..." means. I know it is a lambda but I don't really get it. What is the "d" for? What does it do?

Could this have been written without the lambda here (how)?


Solution

  • You should probably read up on anonymous methods.

    Basically the code you are referring to can be written as an anonymous method without lamba syntax like this:

    public Dinner GetDinner(int id) {    
       return db.Dinners.SingleOrDefault(delegate (Dinner d) {
                                           return d.DinnerID == id;
                                         });
    }