我有以下对象:
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();
我想要的是,保留模型,并在其中保持仅与条件匹配的尺寸。
任何帮助将不胜感激
答案 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()
});