我想知道是否/如何使用LINQ做以下事情:我有一个具有一些属性的对象列表和另一个对应于某个属性的不同值的列表。
示例:
A = [{id=1, property=1}, {id=2, property=1}, {id=3, property=2}]
B = [1, 2]
有没有办法只使用LINQ就能实现下面的事情(获得计数列表)?
var counts = new List<int>();
foreach (var b in B)
{
counts.Add(A.Where(a => a.property == b).Count();
}
示例代码:
public class MyObject
{
public MyObject(int id, int prop)
{
Id = id;
Property = prop;
}
public int Id { get; set; }
public int Property { get; set; }
public void test()
{
var A = new List<MyObject>
{
new MyObject(1, 1), new MyObject(2, 1), new MyObject(3, 2)
};
var B = new List<int>{1, 2};
// LINQ magic
// 2 objects with property 1
// 1 object with property 2
}
}
发布于 2019-05-09 03:01:09
您可以将Count
方法与谓词一起使用:
var A = new[] {new {id = 1, property = 1}, new {id = 2, property = 1}, new {id = 3, property = 2}};
var B = new[] {1, 2};
var count = B.Count(b => A.Any(a => a.property == b));
上面的代码将检查B
中的每个成员,如果A
中至少有一个成员具有该值的property
,则将对其进行计数
发布于 2019-05-09 03:01:49
是,使用select运算符仅选择要比较的特定特性,然后使用intersect和count获取计数。示例:
var listOfObjects = new List<PocoClass>()
{
new PocoClass(){Id=1,Property=3},
new PocoClass(){Id=2,Property=2}
};
var intArray = new int[] { 1, 2, 3 };
var count = listOfObjects.Select(o => o.Property).Intersect(intArray).Count();
发布于 2019-05-09 02:58:26
将B转换为List并在其上运行ForEach
B.OfType<int>().ToList().ForEach(m=>{
counts.Add(A.Where(a => a.property == m).Count();
})
https://stackoverflow.com/questions/56047262
复制相似问题