如何使用LINQ查找与集合匹配的记录?

时间:2012-05-31 22:17:12

标签: c# linq

在下面的示例数据中,我需要找到有多少TransitMapSegmentID匹配TransitLine的10803 TransitMapSegmentID,自101和102匹配后它将为2。

我一直在看这几个小时,我有点眼睛,并会感激一些帮助。谢谢!

public class TransitLineSegment
{
    public int TransitLineID { get; set; }
    public string TransitLineName { get; set; }
    public int TransitMapSegmentID { get; set; }
    public string HexColor { get; set; }
    public double[][] Coordinates { get; set; }
    public int Width { get; set; }
}

示例数据

TransitMapSegmentID  TransitLineID
101                  10803
102                  10803
64                   10807
67                   10807
101                          10807
102                          10807

2 个答案:

答案 0 :(得分:2)

您可以合并Where过滤器和GroupBy

var result = transitLineSegments
            .Where(ls => ls.TransitLineID == 10803)
            .GroupBy(ls => ls.TransitMapSegmentID)
            .Select(grp => grp.Count());    

答案 1 :(得分:1)

使用GroupBy方法。您应该能够通过TransitLineID进行分组并获取每个ID的列表,您可以在其中获取第一个ID或计算它们。

var uni = from segment in segments
      group segment by segment.TransitLineID into segmentGroup
      select new { Id = segmentGroup.Key, Count = segmentGroup.Count() };

foreach(var seg in uni)
    Console.WriteLine ("Id: {0}, Count: {1}", seg.Id, seg.Count);