我今天正在研究MVC4教程,看到用户以不同于我以前的方式实现了一个选择.他的代码是:
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
Run Code Online (Sandbox Code Playgroud)
我看着它并以自己的方式重写它:
var genres = db.Movies
.OrderBy(m => m.Genre)
.Select(m => m.Genre)
.Distinct()
.ToList();
ViewBag.MovieGenre = new SelectList(genres);
Run Code Online (Sandbox Code Playgroud)
他的GenreList变量没有在其他地方使用,所以我摆脱了它.我的主要问题是他如何使用AddRange.AddRange比ToList更好吗?
谢谢阅读!
cdh*_*wie 13
e.ToList<T>() 在引擎盖下实施:
return new List<T>(e);
Run Code Online (Sandbox Code Playgroud)
而List<T>(IEnumerable<T> e)构造函数实际上只是在this.AddRange(e)内部调用.
换句话说,两位代码将以完全相同的方式完成相同的操作.