【问题标题】:How do I convert IEnumerable to Collection with linq如何使用 linq 将 IEnumerable 转换为 Collection
【发布时间】:2017-11-19 14:49:58
【问题描述】:

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

var viewModel = _productAgent.GetProductsByCatalog(catalogId);

viewModel 是 ProductViewModel 的集合

我正在使用 linq 将集合的大小限制为前 10 个产品 orderby createDate desc 像这样...

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 它需要是一个集合,我不知道如何转换它或者我是否采取了正确的方法。

【问题讨论】:

    标签: c# linq collections type-conversion


    【解决方案1】:

    可以使用.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());
    

    【讨论】:

    • 如果想保持懒惰也可以使用linq扩展方法AsEnumerable
    • 你也可以说 from p select p 是……好吧,不是真的需要
    • @Camilo ... LINQ 不是我每天都在写的东西...我怎样才能更有效地编写它?
    • @tony 我编辑了答案,因此从 LINQ 的角度来看它更有意义。但就效率而言,这将取决于您如何检索这些视图模型
    • 好的...确实清理得很好,但我仍然无法将新列表转换为集合
    【解决方案2】:

    你可以试试newList.toList();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多