2012-06-06 104 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所述。

使用視圖。