我在List<>
中添加了一堆不同的部分,其中一些部分可能具有相同的部件号和相同的长度。如果它们的零件号和长度相同,则需要将这些零件分组以进行显示。
将它们分组后,我需要显示该零件号以及特定长度的零件号。
我需要知道如何使用两个不同的属性进行分组,并使用List<ICutPart>
和总计
下面是我能得到的,我试图返回(IGrouping<int,ICutPart>)sGroup;
,但是在函数体的返回部分出现错误。
如何返回带有Group{List<ICutPart> Parts, Int Total}
的类型化对象?
public class CutPart : ICutPart
{
public CutPart() { }
public CutPart(string name, int compID, int partID, string partNum, decimal length)
{
this.Name = name;
this.PartID = partID;
this.PartNumber = partNum;
this.CompID = compID;
this.Length = length;
}
public CutPart(string name, int compID, int partID, string partNum, decimal width, decimal height)
{
this.Name = name;
this.CompID = compID;
this.PartNumber = partNum;
this.PartID = partID;
this.Width = width;
this.Height = height;
this.SF = decimal.Parse(((width / 12) * (height / 12)).ToString(".0000")); //2dp Number;
}
public string Name { get; set; }
public int PartID { get; set; }
public string PartNumber { get; set; }
public int CompID { get; set; }
public decimal Length { get; set; }
public decimal Width { get; set; }
public decimal Height { get; set; }
public decimal SF { get; set; }
}
public class CutParts : List<ICutPart>
{
public IGrouping<int, ICutPart> GroupParts()
{
var sGroup = from cp in this
group cp by cp.Length into g
select new
{
CutParts = g,
total = g.Count()
};
return (IGrouping<int, ICutPart>)sGroup;
}
public new void Add(ICutPart item)
{
base.Add(item);
}
}
最佳答案
我想您想创建一堆组对象,其中每个组对象都具有公共(public)Length
和一堆具有该长度的ICutPart
。
在代码中,它看起来像这样:
public IEnumerable<IGrouping<int, ICutPart>> GroupParts()
{
return this.GroupBy( o => o.Length );
}
那可能需要解释!
IEnumerable
位是组对象的集合-每个不同的Length
一个该集合中的每个“组对象”都是一个
IGrouping<int, ICutPart>
。该对象具有
Key
属性,在这种情况下,该属性是按Length
分组的对象。这也是
IGrouping<T>
源自IEnumerable<T>
的集合-这是具有该长度的ICutPart
的集合。如果在组对象之一上调用
ToList()
,则将获得List<ICutPart>
为了使调用者更容易做到这一点,您可以创建一个类来保存这些值。
如果您声明这样的类:
public class GroupedByLength
{
public int Length { get; set; }
public List<ICutPart> CutParts { get; set; }
}
那么您可以返回这些对象的集合:
public List<GroupedByLength> GroupParts()
{
return this
.GroupBy( o => o.Length )
.Select( g => new GroupedByLength
{
Length = g.Key,
CutParts = g.ToList(),
}
)
.ToList()
;
}