将重复选择组合到单个结果中

时间:2014-10-27 14:01:03

标签: c# wpf linq list

除了previous question之外,我仍然没有解决问题的具体方法。

我有2个这样的课程:

public class Product
{
    public Product()
    {
        Options = new List<Option>();
    }
    public string Name { get; set; }
    public int ID { get; set; }
    public List<Option> Options { get; set; }
}

public class Option
{
    public int SubID { get; set; }
    public string SubName { get; set; }
    public int ListBoxID { get; set; }
    public decimal Price { get; set; }
    public bool IsSelected { get; set; }
}

在这样的列表中使用的是:

List<Product> Products { get; set; }

enter image description here

当用户选择左侧的产品(总是具有相同的属性)时,它的内部List<Optie>将被加载到4个不同的ListBox's中,过滤为{{1 }}

现在,如果用户在2个产品中选择相同的选项,如何使用linq将它们转换为一个结果?

e.g。加载了4个相同的产品,用户为2个产品选择相同的选项,然后我的结果将是:

ListBoxID

如果其他2个产品有不同的选择,这些可能是他们的结果:

2x Product 2x lookbrood 2x ollema 2x fitness broodje 2x testtest

我总是需要加载到2x Product 2x ciabatta broodje 2x ollema 2x slagroom 2x smos的数量: 例如:装载了6种产品,然后我的组合可以是:

Products

3x Product 3x ciabatta broodje 3x ollema 3x slagroom 3x smos

3x Product 3x Some other option 1 3x Some other option 2 3x Some other option 3 3x Some other option 4

2x Product 2x Some option 1 2x Some option 2 2x Some option 3 2x Some option 4

2x Product 2x Some other option 1 2x Some other option 2 2x Some other option 3 2x Some other option 4

这是我能给出的最佳解释,我希望图片有所帮助。

1 个答案:

答案 0 :(得分:2)

您在寻找GroupBy吗?这会将具有相同ID的Optie分组,并为您提供它们的编号。

Product.Opties
    .GroupBy(x => new {
        x.ListBoxID, x.Naam
    })
    .Select(x => 
    new { 
        ListBoxID = x.Key.ListBoxID,
        Naam = x.Key.Naam,
        Count = x.Count()
    })

More info on GroupBy