3

我已经在我的一个网站上使用 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 建议使用视图,这是一种更简单的方法。我创建了一个视图,将两个表与我需要的字段连接在一起,并针对它运行查询,简单有效,谢谢!

4

2 回答 2

1

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

正如戴夫马克尔所说。

使用视图。

于 2012-06-25T19:39:49.707 回答
0

另外一个选项!

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

于 2018-08-02T01:03:14.430 回答