SQL to Linq - 选择第一个匹配的行

时间:2013-02-02 13:35:14

标签: .net sql c#-4.0 linq-to-sql

我一直在努力寻找我正在解决的这个任务问题的答案,尽管早上没有在这里搜索。 我查看了MIN / MAX子句,但似乎无法在我的场景中正确使用它。

我正在执行这个简单的LINQ查询,其中我搜索列匹配的所有行

using (DataClasses2DataContext db = new DataClasses2DataContext())
        {
            var routes = (

                          from txcalllines in db.TxcAllLines
                          where
                              txcalllines.LineName == searchString
                          select txcalllines);

            return routes.ToList();
        }

这会返回以下结果:

FILE                           LINE   START               FINISH
output_txc_45486m.xml           486   North Station       Friswell Place
SVRAYAO486-20121008-22264.xml   486   Dunoon              Inveraray
SVRAYAO486-20121008-22265.xml   486   Dunoon              Inveraray
SVRAYAO486-20121008-22266.xml   486   Dunoon              Inveraray
SVRGMB04860-20120103-5774.xml   486   BURY                RADCLIFFE
SVRGMB04860-20120103-5775.xml   486   BURY                RADCLIFFE
SVRYNAO486-20120217-44588.xml   486   Selby Bus Stn       Pollington Circular

问题是,运行此查询会返回相同路径的多行(您可以看到LINE,START和FINISH是相同的),其中我只想返回每个路径的第一个匹配行。

所以期望的结果是:

FILE                           LINE   START               FINISH
output_txc_45486m.xml           486   North Station       Friswell Place
SVRAYAO486-20121008-22264.xml   486   Dunoon              Inveraray
SVRGMB04860-20120103-5774.xml   486   BURY                RADCLIFFE
SVRYNAO486-20120217-44588.xml   486   Selby Bus Stn       Pollington Circular

2 个答案:

答案 0 :(得分:1)

您可以使用GroupBy然后获取每个组的第一个元素。

var routes = (from txcalllines in db.TxcAllLines
              where txcalllines.LineName == searchString
              group txcalllines by new { txcalllines.Start, txcalllines.Finish } into g  // Groups the txcalllines by the pair (Start, Finish)
              select g.First());  // Gets the first intem of the group

答案 1 :(得分:0)

我误解了这个问题,我道歉......也许这可能有帮助吗? https://stackoverflow.com/a/706903/1380061