如果我在c#中有对象列表,如何创建列表列表?

时间:2014-08-06 17:31:08

标签: c# linq list

我有一个看起来像这样的对象

public class CompletionRow
{
    public int Pass;
    public int Fail;
    public int Blocked;
    public int NA;
    public string DesignName;
    public double WorkWeek;
    public int CompletionStatus;
}

我想创建一个包含另一个包含其中两个值的列表的列表。例如,我想要一个这样的列表:

修改

public class Vals
{
    string DesignName;
    int CompletionStatus;

}
List<List<Vals>> eachCustomer = new List<List<Vals>>();

如果我有这样的对象列表:

List<CompletionRow> results = new List<CompletionRow>();

是否有可能将其纳入我的双重名单?我已经尝试用linq做一些事情,我选择一个值,然后使用.ToList(),但我无法弄清楚如何用一个额外的列表来做到这一点。

3 个答案:

答案 0 :(得分:1)

通常,您只需使用Tuple<string, int>,匿名类型,KeyValuePair<string, int>或您定义的具体类型。这只取决于背景。虽然如果你把它传递给另一种类型,我会创建另一个类。

然后你可以按照你的建议使用LINQ。

return results.Select(c => new { DesignName = c.DesignName, CompletionStatus = c.CompletionStatus }).ToList();

这是匿名类型解决方案,但除非您仅在定义函数的范围内使用它,否则我会对此方法保持警惕。否则,请使用Tuple或具体类型。当然,后者最好是。

您无法拥有包含多个项目的列表。那不是什么列表。除非您正在寻找字典:

return results.ToDictionary(c => c.DesignName, c => c.CompletionStatus);

这将创建一个字典(如果您追加.ToList()将成为List<KeyValuePair<string, int>>),其中DesignName是关键字,CompletionStatus是值。

修改

虽然查看您的特定短语&#34;其中包含一个内部列表,该列表具有来自我的对象的两个属性(DesignName和CoompletionStatus),&#34;我有点困惑。如果您确实希望标题显示为List<List<T>>,则DesignNameCompletionStatus类型之间的最大公分为object。因此,这将是非常糟糕的。

return results.Select(c => new List<object>() { c.DesignName, c.CompletionStatus }).ToList();

如果你出于某种原因,确实决定你想要那个,我会至少将其保留为List<object[]>。但我无法想象一个实际上有用的场景。

编辑2:

通过在原始问题中引入Vals类型,我真的不知道你是如何制作List<List<Vals>> 但是 a { {1}}简单明了:

List<Vals>

答案 1 :(得分:0)

如果需要,可以使用linq创建新列表:

 var newlist = results
               .Select(x => new { Name : x.DesignName,
                                  Status : x.CompletionStatus }).ToList();

答案 2 :(得分:0)

CompletionRow类的“DesignName”属性可以替换为Vals对象列表:

public class CompletionRow
{
    public int Pass;
    public int Fail;
    public int Blocked;
    public int NA;        
    public List<Vals> DesignList { get; set; }
    public double WorkWeek;
}

这样,List&lt; CompletionRow&gt;结果可以包含其中的Vals列表。