【问题标题】:Convert ToList() to a list of MyObject将 ToList() 转换为 MyObject 的列表
【发布时间】:2015-07-24 01:14:23
【问题描述】:

我正在尝试转换 MyObject 中的 List,使用 LINQ 并返回到 MyObject 列表。

public class Part
{
    public string ID { get; set; }
    public string DescFr { get; set; }
    public string DescEng { get; set; }
    public string PartNumber{ get; set; }
    public Part(string strID, string strDescFr, string strDescEng, string strPartNumber) 
    {
        this.ID = strID;
        this.DescFr = strDescfr;
        this.DescEng = strDescEng;
        this.PartNumber= strPartNumber;
    }
}

所以在另一个类中,我使用该类通过数据库创建Part 对象列表。

List<Part> lstParts = DB.Query.GetParts();

然后我按描述对它们进行分组

var lstGrouped = lstParts.GroupBy(x => x.DescrFr);

编辑:

var lstGrouped = lstParts.GroupBy(x => x.PartNumber);

如何将lstGrouped 转换回List&lt;Part&gt;? 我尝试了ToList() 方法并将其转换为List&lt;Part&gt;,它不起作用,给我一个转换错误:

启用转换类型的对象

【问题讨论】:

  • 你为什么要分组,只是为了回到未分组的集合?
  • 嗯,这只是一个例子,但我正在对我的 PartNumber 进行分组,它可以是重复的。我会编辑它
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 不是真的我只需要显示单个 PartNumber 而不是重复的,我知道我可以在 quey 中分组,但我需要其他说明的所有部分,这就是我尝试分组的原因使用 linq,
  • 这听起来像XY problem;请告诉我们你想要得到什么结果,为什么你认为“将 lstGrouped 转换回List&lt;Part&gt;”会这样做,以及为什么你会在你的代码中这样做而不是任何GetParts 调用。另外请发布您的真实代码和真实的错误消息;编造事情使您无法猜测您要完成的工作。

标签: c# wpf linq list


【解决方案1】:

由于分组返回IGrouping 中的IEnumerable,因此您不能只将其转换回子列表。如果您尝试删除重复项,只需选择第一个:

List<Part> finalList = lstGrouped.Select(g => g.First()).ToList();

如果您想要所有项返回(此时,您为什么将它们分组?)然后使用SelectMany

List<Part> finalList = lstGrouped.SelectMany(g => g).ToList();

【讨论】:

    【解决方案2】:

    GroupBy 返回一个IEnumerable&lt;IGrouping&lt;TKey, TSource&gt;&gt;,因此您不再使用TSource 的列表(在您的情况下为Part),而是一个分组列表。

    您可能想要遍历分组并从每个分组中获取列表(请参阅How to get values from IGrouping)。

    很难完全回答,因为我不清楚目标(为什么要分组,只是为了再次获得未分组的列表)。

    【讨论】:

      【解决方案3】:

      看起来您想从项目列表中获取不同的项目。在这种情况下,您可以在原始列表中使用 Distinct 方法,也可以使用您的组方法并执行以下操作 -

      lstParts.GroupBy(x => x.PartNumber).Select(x=>x.First()).ToList();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 2023-03-23
        • 2023-03-27
        相关资源
        最近更新 更多