【问题标题】:Using JOIN with Linq to SQL ExecuteQuery Issue使用 JOIN 与 Linq to SQL ExecuteQuery 问题
【发布时间】:2012-06-10 20:21:02
【问题描述】:

我在我的一个网站上使用 Linq to SQL 已经有一段时间了,随着时间的推移,我用来查询数据库的代码变得有点乱,所以我决定重写,最初我的查询都被处理了由 Linq 独家提供,但最近出现了对更高级搜索功能的需求,这导致我更倾向于使用 ExecuteQuery 和手写我的 SQL 语句,问题是我无法让 Join 语句正常工作。

我的数据库中有两个表,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 建议使用视图,到目前为止,这是一种更简单的方法。我创建了一个视图,将两个表与我需要的字段连接在一起,并针对它运行查询,简单有效,谢谢!

【问题讨论】:

  • 我知道这并不能真正直接回答您的问题,但我个人倾向于避免像这样使用 ExecuteQuery。相反,我会创建一个视图并绑定到它。
  • @DaveMarkle 我最初是这么想的,但问题是实际上有数百种查询组合,这就是最初让我更倾向于 ExecuteQuery 的原因
  • 我收回了这一点,脑子里放了一会儿屁,也许我在想存储过程,这很有效,而且比我预期的要容易得多......

标签: asp.net sql linq-to-sql


【解决方案1】:

嗯 - 所以也许我们应该在这里有一个答案,这样问题就会从“未回答”列表中删除。

正如戴夫马克尔所说。

使用视图。

【讨论】:

    【解决方案2】:

    另一种选择!

    执行查询两次:一次使用 db.ExecuteQueryt_events>,一次使用 db.ExecuteQueryt_clients>。现在您拥有事件和客户端,您可以通过匹配 client_id 在客户端重新加入它们。

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多