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