2012-06-06 134 views
3

我一直在我的一个网站上使用LINQ to SQL一段时间,随着时间的推移,我用来查询数据库的代码变得有点混乱,写,原来我的查询全部由Linq处理,但是最近需要更高级的搜索功能,这导致我更多地使用ExecuteQuery并手写我的SQL语句,问题是我无法为我的生活获取Join声明正常工作。使用JOIN与LINQ到SQL ExecuteQuery问题

我在我的数据库中有两个表,t_events和t_clients。两张表之间唯一相似的地方是它们都有一个clientid字段(事件客户端的id)。我需要能够做的是将所有事件拉入页面(这可以正常工作),但我不想在显示客户端名称的页面上显示clientid。本来我有很好的处理了这个连接子句:

var eve = from p in db.t_events 
          join c in db.Clients on p.clientid equals c.clientid 
          where p.datedue <= thisDay && p.status != "complete" 
          select new { p.eventname, p.datedue, p.details, p.eventid,   p.status, c.clientname }; 

随着然而我有什么重建LINQ已与加盟这里做的问题页面的重新设计。我当前的代码:

StringBuilder sqlQuery = new StringBuilder("SELECT * FROM dbo.t_events JOIN dbo.t_clients ON dbo.t_events.clientid=dbo.t_clients.clientid"); 
    var query = db.ExecuteQuery<t_events>(sqlQuery.ToString()); 
    foreach (var c in query) 
    {  
      counter = counter + 1; 
      MyStringBuilder.Append("<tr class='"+c.status+"'><td><a href='searchdetails.aspx?id="+c.eventid+"'>"+c.eventname+"</a></td><td>" +c.clientname+ "</td></tr>"); 
    } 

在foreach循环中我可以看到我想在c.clientname拉(其中不工作),因为它是不t_events数据库,改变这c.clientid品牌代码的工作,我不知道是什么问题,因为采取相同的SQL和直接运行查询SQL管理工具就像一个魅力。任何关于这个问题的想法将不胜感激!

固定!

DaveMarkle建议使用视图,这是迄今为止更简单的方法。我创建了一个视图,将这两个表连同我需要的字段一起加入,并对其执行查询,简单而有效,谢谢!

+2

我知道这并不直接回答你的问题,但我个人倾向于退出使用这种ExecuteQuery。相反,我会创建一个视图并将其绑定到该视图。 –

+0

@DaveMarkle我原本以为这样想,但问题是,有几百个查询组合,这是什么原本让我更加朝着ExecuteQuery – Gordnfreeman

+0

我采取了回来,有一个脑屁一时,也许我想到存储过程,工作,并更容易,然后我会预期... – Gordnfreeman

回答

1

呃 - 也许我们应该在这里有个答案,然后这个问题就会从'未答复'列表中消失。

正如Dave Markle所述。

使用视图。