首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取列表中具有另一个列表中某一属性的所有项的计数

获取列表中具有另一个列表中某一属性的所有项的计数
EN

Stack Overflow用户
提问于 2019-05-09 02:51:00
回答 4查看 1.6K关注 0票数 0

我想知道是否/如何使用LINQ做以下事情:我有一个具有一些属性的对象列表和另一个对应于某个属性的不同值的列表。

示例:

代码语言:javascript
复制
A = [{id=1, property=1}, {id=2, property=1}, {id=3, property=2}]
B = [1, 2]

有没有办法只使用LINQ就能实现下面的事情(获得计数列表)?

代码语言:javascript
复制
var counts = new List<int>();
foreach (var b in B)
{
    counts.Add(A.Where(a => a.property == b).Count();
}

示例代码:

代码语言:javascript
复制
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
    }
}
EN

回答 4

Stack Overflow用户

发布于 2019-05-09 03:01:09

您可以将Count方法与谓词一起使用:

代码语言:javascript
复制
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,则将对其进行计数

票数 1
EN

Stack Overflow用户

发布于 2019-05-09 03:01:49

是,使用select运算符仅选择要比较的特定特性,然后使用intersect和count获取计数。示例:

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2019-05-09 02:58:26

将B转换为List并在其上运行ForEach

代码语言:javascript
复制
B.OfType<int>().ToList().ForEach(m=>{ 
      counts.Add(A.Where(a => a.property == m).Count();
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56047262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档