2012-05-31 29 views
-1

在下面的示例数据中,我需要查找有多少TransitMapSegmentID与TransitLine的10803 TransitMapSegmentID匹配,因为101和102匹配,这将是2。如何查找与使用LINQ的集合相匹配的记录?

我一直在看这个几个小时,我有点杂眼,并希望得到一些帮助。谢谢!

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 
+3

你问题的措辞是一种误导。你可能想考虑改写。具体而言,您的示例说明表示您希望为TransitLineId = 10803找到两个匹配的TransitMapSegmentID,这将是TransitMapSegmentIDs = 101和TransitMapSegmentIDs = 102。请注意,101和102不匹配,因此该语句使0有意义。你的例子(每行的num段)与你在第一段中解释的内容完全相反(每段数目为数)。 – csauve

回答

1

使用GroupBy方法。您应该能够按TransitLineID进行分组,并获取每个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); 
+0

我该怎么做一个条件的GroupBy,因为我需要过滤出在同一个id下的那个。 – NullReference

+0

我将举一个例子 –

2

您可以结合一个Where过滤器和GroupBy

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