public static List <AvgSpeedReportItem> GetReportData() { string query = @"WITH RankedLink AS ( SELECT ROW_NUMBER() OVER (ORDER BY Link, SegEndC) [Number], * FROM dbo.Olaine_LINK_EVAL), MiddleLink AS ( SELECT AVG(Number) [MiddleLink] FROM RankedLink GROUP BY Link), AvgSpeed AS ( SELECT AVG(v__0_) [speed], Link FROM dbo.Olaine_LINK_EVAL GROUP BY Link) SELECT RankedLink.Link, 0 [Lane], (SegStX + SegEndX)/2 [center.x], (SegStY + SegEndY)/2 [center.y], AvgSpeed.speed FROM RankedLink JOIN MiddleLink ON RankedLink.Number=MiddleLink.MiddleLink JOIN AvgSpeed ON RankedLink.Link=AvgSpeed.Link" ; var list = new List <AvgSpeedReportItem>(); try { var sb = new OleDbConnectionStringBuilder(vissim.Instance.Evaluation.Wrap().GetConnectionString()); if (sb.ContainsKey("Password")) { using (var conn = new OleDbConnection(sb.ConnectionString)) { conn.Open(); try { using (var reader = new OleDbCommand(query, conn).ExecuteReader()) { while (reader.Read()) { list.Add(new AvgSpeedReportItem() { Link = reader.GetInt32(0), Lane = reader.GetInt32(1), Center = new Point(reader.GetDouble(2), reader.GetDouble(3)), AvgSpeed = reader.GetDouble(4) }); } } } finally { conn.Close(); } } } } catch { } return(list); }