将字符串列表添加到viewmodel列表

时间:2015-06-18 09:38:48

标签: c# asp.net-mvc list generic-collections

public ActionResult LatestNews()
{
    using (NDTMS2UtilsEntities newsEntities = new NDTMS2UtilsEntities())
    {
        var newsItems = newsEntities.News.OrderByDescending(ni => ni.DateCreated).Take(5);

        int n = 0;
        var urlList = new List<string>();
        var newsModel = new List<NewsManagerViewModel>();

        while (n < newsItems.Count())
        {
            string newsUrl =
                new Uri(Request.Url.Scheme + "://" + Request.Url.Host + ":3153/News/Index/" + n).ToString();

            urlList.Add(newsUrl);

            n++;
        }
        newsModel = newsItems.Select(item => new NewsManagerViewModel()
        {
            Title = item.Title,
            NewsContent = item.NewsContent, 
            DateCreated = (DateTime) item.DateCreated
        }).ToList();

        return PartialView(newsModel);
    }
}

上面的代码创建了按日期降序排序的前5个新闻列表,我创建了两个列表,一个是名为urlList的URL列表,另一个列出了名为newsModel的新闻项

urlList是字符串列表,newsModelNewsManagerViewModel的列表,每个列表中只有5个元素。

我正在寻找一种组合这两个列表的方法,以便每个URL与每个新闻项匹配。

目前如果我使用newsModel.AddRange(urlList)组合列表,所有新闻项目在最后都有相同的ID(4),而我的要求是第一个新闻项目的id为0,最后一个id为4。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

您可以在一个for中一次创建它们,而不是单独创建它们。

public ActionResult LatestNews()
{
    using (NDTMS2UtilsEntities newsEntities = new NDTMS2UtilsEntities())
    {
        var newsItems = newsEntities.News.OrderByDescending(ni => ni.DateCreated).Take(5).ToList();

        var newsModel = new List<NewsManagerViewModel>();

        for(int n = 0; n < newsItems.Count(); n++)
        {
            string newsUrl = new Uri(Request.Url.Scheme + "://" + Request.Url.Host + ":3153/News/Index/" + n).ToString();
            var item = newsItems[n];
            var newsManagerModel = new NewsManagerViewModel()
            {
                Title = item.Title,
                NewsContent = item.NewsContent, 
                DateCreated = (DateTime) item.DateCreated,
                NewsUrl = newsUrl // add the url
            }
            newsModel.Add(newsManagerModel)
        }

        return PartialView(newsModel);
    }
}