我有一个看起来像这样的对象
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(),但我无法弄清楚如何用一个额外的列表来做到这一点。
答案 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>>
,则DesignName
和CompletionStatus
类型之间的最大公分为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列表。