简单的MVC NerdDinners Lambda

joh*_*nny 4 model-view-controller lambda nerddinner

在Microsoft的MVC教程NerdDinners的代码中:

公共类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();
} 
Run Code Online (Sandbox Code Playgroud)

}

什么:

public Dinner GetDinner(int id) {
    return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
Run Code Online (Sandbox Code Playgroud)

"d"是什么意思?这段代码是如何工作的?我知道它带来了来自功能参数的Dinnerid匹配id的晚餐.我不明白"d去......"的意思.我知道这是一个lambda,但我真的不明白.什么是"d"?它有什么作用?

这可能是在没有lambda的情况下编写的(如何)?

Jim*_*uts 5

您应该阅读匿名方法.

基本上你引用的代码可以写成匿名方法,没有lamba语法,如下所示:

public Dinner GetDinner(int id) {    
   return db.Dinners.SingleOrDefault(delegate (Dinner d) {
                                       return d.DinnerID == id;
                                     });
}
Run Code Online (Sandbox Code Playgroud)