这应该相当简单,但我真的很头疼,我想我需要睡一觉。
我有一些代码中的列表
属性对象如下:
public class Properties {
public int IdProperty
public int ProductId
}
这与KeyValue对很相似。举例说明这个值:
Product - Property
1 1
1 2
2 1
2 3
3 1
3 3
我想要的是从该列表中获取包含所有产品的属性(在本例中为id为1的属性)
返回列表应为:
1 1
2 1
3 1
这应该很简单,不是吗? (尝试使用lambda linq)
添加了试用的查询:
properties.Where(p => properties.All(x => x.IdProperty == p.IdProperty));
properties.Join(properties, p=>p.IdProperty, ... not sure what to put on other params);
一些疯狂的双向列表来匹配。
注意:我不知道共同财产。
答案 0 :(得分:4)
return properties.Where(p => p.PropertyId == 1);
其中properties
是包含您要从中选择的属性对象的IEnumerable<Properties>
。
修改强> 现在了解您的问题,获得所有产品共有的所有财产ID的一种方法是:
var productCount = properties.Select(p => p.ProductId).Distinct().Count();
return properties.Where(p => properties.Count(x => x.IdProperty == p.IdProperty) == productCount);
答案 1 :(得分:3)
我猜你不知道所有产品都有哪些属性......
// get number of products
var nbOfProducts = properties.Select(x => x.Product).Distinct().Count();
// group records by property
// and get only groups with number of items same as number of products
var result = properties.GroupBy(x => x.Property)
.Where(g => g.Count() == nbOfProducts)
.SelectMany(g => g);
答案 2 :(得分:-1)
yourCollection.Where(p => p.PropertyId == 1);
或
yourCollection.GroupBy(p => p.PropertyId);
第二个选项会对它们进行分组,以便在需要时可以获得其他选项。