我已经在我的一个网站上使用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建议使用一个视图,这是迄今为止更简单的方法。我创建了一个视图,将两个表连接到我需要的字段并对其进行查询,简单有效,谢谢!
答案 0 :(得分:1)
嗯 - 所以也许我们应该在这里找到答案,所以这个问题会从'未答复'列表中删除。
正如Dave Markle所说。
使用视图。
答案 1 :(得分:0)
另一个选择!
执行两次查询:一次是使用db.ExecuteQuery << strong> t_events >,一次是db.ExecuteQuery << strong> t_clients >。现在您同时拥有事件和客户端,您可以通过匹配client_id在客户端将它们重新加入。