返回列表,同时仅在条件C#中保留子列表中的项目

时间:2018-05-13 17:15:49

标签: c# list linq

我有以下对象:

public class Model
{
    public int ID { get; set; }
    public decimal Price{ get; set; }
    public string Address{ get; set; }
    public List<Characteristic> Characteristics{ get; set; }
    public List<Size> Sizes{ get; set; }
}

我正在处理List<Model> models。我希望使用Sizes上的条件对其进行过滤,其方式为:

最终,我希望在List<Model> models中保留ID,价格,地址,特征,但在List<Size> Sizes中我只保留与Sizes上的条件匹配的项目。

在linQ中,有一种方法可以将models中的项目保持在Sizes ALL 中的项目符合条件:

 var keep = models.Where(r => r.Sizes.All(x => x > condition)).ToList();

或者将models中的项目保留在Sizes至少项中的项目符合条件:

var keep = models.Where(r => r.Sizes.Any(x => x > condition)).ToList();

我想要的是,保留模型,并在其中保持仅与条件匹配的尺寸。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

这会改变你的模型,所以你应该循环它们。然后,您可以使用Linq过滤Sizes

foreach(var m in models)
{
    m.Sizes = m.Sizes.Where(x => x > condition).ToList();
}

如果您不想改变原始模型,那么您必须创建新模型。

var keep = models.Select(m => new Model {
    ID = m.ID,
    Price = m.Price,
    Address = m.Address,
    Characteristics = m.Characteristics,
    Sizes = m.Sizes.Where(x => x > condition).ToList()
});