无法使用ASP.net在SQL中选择多个记录

时间:2011-11-18 22:24:41

标签: asp.net vb.net linq

我有问题,我一直在寻找一周如何解决它。昨天我以为我解决了,但显然当我尝试使用我的数据库中添加的新数据进行查询时,我没有。

这是我的查询

Public Function getTicketsByBeginstation(ByVal station As String) As Array

    Dim r As Array

    r = (From u In treinDataContext.Tickets Where u.ritId =
         (From v In treinDataContext.Rittens Where v.trajectId =
          (From s In treinDataContext.Trajectens Where s.beginstationId =
           ((From t In treinDataContext.Stations Where (t.naam = station) Select t.id).First) Select s.id).First Select v.id).First Select u.datumAankoop, u.betaalmethodeId, u.tijdAankoop, u.klasseId, u.ritId Order By datumAankoop Ascending).ToArray

    Return r

End Function

我遇到的问题是:当我选择了一个工作站时,有超过1个trajecten(英文连接),但我必须使用.first,否则Visual Studio会给出错误“''''运算符未定义对于'整数'和'system.linq.IQueryable(整数)“。

所以我给出一个电台的名字 - >我必须选择所有具有给定站的trajectens作为beginstation - >我必须选择所有具有给定trajecten的ritten - >我必须选择所有具有给定ritten的门票

所以:我必须显示某个电台的所有门票。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

可能是你正在寻找加入

r = (From u In treinDataContext.Tickets 
       Join v In treinDataContext.Rittens 
       On u.ritId = v.id
       Join s In treinDataContext.Trajectens 
       On v.trajectId equals v.id
       JOIN t In treinDataContex 
       On s.beginstationId equals t.id 
       Where (t.naam = station)
       Select u.datumAankoop, 
               u.betaalmethodeId, 
               u.tijdAankoop,
               u.klasseId, 
               u.ritId 
       Order By  datumAankoop Ascending ).ToArray()

有关联接的详细信息,请参阅MSDN文章How to: Combine Data with LINQ by Using Joins (Visual Basic)

答案 1 :(得分:0)

这是来自内存,并不保证在语法上是正确的。它使用LINQ的扩展方法样式。但是这样的事情可能有用:

Dim a = treinDataContext.Stations.Where(Function(t) t.naam = station) _
       .Join(treinDataContext.Trajectens, Function(s) t.id = s.beginstationId) _
       .Join(treinDataContext.Rittens, Function(v) v.trajectId = s.Id) _
       .[Select](Function(v) v.Id)
Dim b = treinDataContext.Tickets.Where(Function(u) a.Any(a.Id = u.ritId))

我的原始代码是在C#中;我使用自动翻译器将其转换为VB。对于任何语法错误,我深表歉意。