我将一堆不同的零件添加到一个List<>
并且一些零件可能具有相同的零件号和相同的长度。 如果他们有相同的零件号码和相同的长度,我需要将这些零件分组来显示。
当他们分组时,我需要显示该部分的数量,以及具有特定长度的部分数量。
我需要知道如何将两个不同的属性组合在一起,然后用List<ICutPart>
返回一个types化的对象,
下面是我所能得到的,我试图返回(IGrouping<int,ICutPart>)sGroup;
但是我在函数体的返回部分发生错误。
我怎样才能返回一个types的对象与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); } }
我想你想要创建ICutPart
对象,其中每个组对象具有共同的Length
和一堆具有该长度的ICutPart
。
在代码中,它看起来像这样:
public IEnumerable<IGrouping<int, ICutPart>> GroupParts() { return this.GroupBy( o => o.Length ); }
这可能需要解释!
IEnumerable
位是组对象的集合 – 对于每个不同的Length
该集合中的每个“组对象”都是一个IGrouping<int, ICutPart>
。
这个对象有一个Key
属性,在这种情况下,这是你分组的东西。
它也是一个集合, IGrouping<T>
从IEnumerable<T>
IGrouping<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() ; }
您试图将IEnumerable<IGrouping<int ICutPart>>
为<IGrouping<int ICutPart>>
; 这将永远不会工作。 您将不得不从IEnumerable <>中选择一个instnace,也许这样:
return sGroup.FirstOrDefault();