今天我正在学习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);
我看了一下,按照我的方式重写如下:
var genres = db.Movies
.OrderBy(m => m.Genre)
.Select(m => m.Genre)
.Distinct()
.ToList();
ViewBag.MovieGenre = new SelectList(genres);
他的GenreList变量没有在其他地方使用,所以我把它删掉了。我的主要问题是他如何使用AddRange。 AddRange比ToList更好吗?
谢谢阅读!
AddRange
允许您将项目添加到现有列表中。ToList
则不行。 - Brian RasmussenIList
,那么构造函数也不会知道大小,所以它的工作方式是一样的。显然,程序员并没有手动输入大小,因此在编译时他不知道[大致]大小将是多少。 - Servyvar range=Enumerable.Range(1, 10000000);List<int> list=range.ToList()
实际上比list=new List<int>(10000000);list.AddRange(range)
要低效得多,甚至比list=new List<int>(range.Count());list.AddRange(range)
还要低效(因为后者将确保列表不会超过必要的大小)。 - Tim Schmelter