【问题标题】:SQL to Linq - selecting first matching rowsSQL to Linq - 选择第一个匹配的行
【发布时间】:2013-02-02 13:35:14
【问题描述】:

我一直在努力寻找我正在解决的这个任务问题的答案,尽管早上没有在这里搜索。 我已经查看了 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

【问题讨论】:

  • 好点,我不打算调用 .ToList() 两次。
  • 它只是将它放在一个列表中,我的客户端应用程序可以很好地阅读它。 (以上代码来自 WCF 服务)

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


【解决方案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

【讨论】:

  • 嗨 Cedric,感谢您的回答,但它无法编译。它抱怨几个问题,包括“invalid expression term 'in'”,并期待一些 ) 和 ;
  • @DanSewell 我已经更新了我的帖子(只是将 in 更改为 _into)。
【解决方案2】:

我误解了这个问题,我深表歉意......也许这可能会有所帮助? https://stackoverflow.com/a/706903/1380061

【讨论】:

  • 对不起,我不确定你是否理解,我想返回几行(编辑问题以使这一点更清楚)
猜你喜欢
  • 2012-03-19
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多