如何使用linq将IEnumerable转换为Collection

9

我正在使用ProductViewModel中的产品填充部分视图。当模型返回时,我们有...

var viewModel = _productAgent.GetProductsByCatalog(catalogId);

viewModel是ProductViewModel集合。

我正在使用linq按照创建日期降序排列的方式来限制集合大小,仅保留前10个产品,代码如下...

var newList = (from p in viewModel
           //from pf in p.DomainObjectFields
           select p).Distinct().OrderByDescending(d => d.CreateDate).Take(10);

我尝试加载部分内容...

return PartialView("_ProductGrid", viewModel);

问题在于newList是IEnumerable类型,它需要是一个集合,但我不知道如何转换它,或者我是否采取了正确的方法。

这个回答解决了你的问题吗?无法将IEnumerable<T>转换为ICollection<T> - Michael Freidgeim
也许这篇帖子可以帮到你 https://dev59.com/ZGoy5IYBdhLWcg3wN7i8 - Axel Samyn
2个回答

24

您可以使用扩展方法.ToList().ToArray()等。

var newList = viewModel
    .Distinct()
    .OrderByDescending(d => d.CreateDate)
    .Take(10)
    .ToList();

更新

如果你想将一个 IEnumerable<T> 转换为 Collection<T>,你可以使用 Collection<T> 类的构造函数重载,像这样:

Collection<ProductViewModel> newList = new Collection<ProductViewModel>(viewModel
    .Distinct()
    .OrderByDescending(d => d.CreateDate)
    .Take(10)
    .ToList());

2
如果想保持lazy,你也可以使用linq的扩展方法AsEnumerable - dcg
1
你也可以说从 p 中选择 p 是...其实并不需要。 - Camilo Terevinto
@Camilo...LINQ不是我每天都写的东西...我该如何更高效地编写它? - tony
@tony,请定义一个集合。你想将它转换成什么类型? - Deadzone
@Deadznone...谢谢你的解决方案...我百万年也想不到要这样做!太棒了 :) - tony
显示剩余4条评论

-3
你可以尝试使用 newList.toList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接