2013-04-25 98 views
0

我有以下查詢插入到SQL和加入

var listOfFollowers = (from a in db.UserLinks 
     where a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 
     join b in db.UserNotifications on (int)a.OriginUserID equals b.TargetUserID 
     select b); 

然後我想在每一行上一次列更新(或物體)返回

foreach (var a in listOfFollowers) 
    { 
     a.UserNotifications += HappeningID.ToString() + "|"; 
    } 
    db.SubmitChanges(); 

查詢似乎工作,當我將生成的SQL放入SSMS時,它可以正常工作,但是當我運行整個代碼時,我會遇到嘗試轉換爲int的異常,請不要太多理解。

這是好的,做一個查詢使用聯接,但只返回一個表,更改一個屬性,然後submitchanges?

+0

@ShafqatMasood - 羅沒有運氣 – 2013-04-25 20:44:09

+0

試試這個變種listOfFollowers =(從在db.UserLinks 其中a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 JOIN B在db.UserNotifications上a.OriginUserID等於SqlFunctions.StringConvert((double)b.TargetUserID) select b); – 2013-04-25 20:54:12

回答

2

你得到的原因不能轉換異常是因爲在LINQ語句中它是無效的投射。其他的事情我們不能做的是使用常規的方法調用,如toString()

(int)a.OriginUserID是不允許

var listOfFollowers = (from a in db.UserLinks 
    where a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 
    join b in db.UserNotifications on (int)a.OriginUserID equals b.TargetUserID 
    select b); 

因爲解析器試圖將其轉換成等價的SQL會發生此問題,但沒有找到任何等價物。其他此類情況是當您嘗試調用toString()時。這裏有幾個好對策: linq-to-entities-does-not-recognize-the-method

對於您目前的情況,我相信你有 1.從第一個查詢 2.結果投值 3.第二LINQ查詢

希望這幫助!

+0

我沒有使用ToString(),似乎這將是無效的比較兩個數字,但它是投擲到一個int拋出異常,我改變了數據庫,使兩個列bigint,而不是一個int和一個bigint – 2013-04-25 21:48:56

+0

對於不適當的演員,你是對的,所以你得到了我的接受和贊成,但做了一個查詢,然後鑄造,然後另一個查詢從形式是最有效的方式來做到這一點。 – 2013-04-25 21:51:25

+0

@Scott。演員絕對是你的案子的問題。我的意思是說,還有其他一些我們在LINQ語句中無法做到的事情,例如使用諸如「toString()」之類的方法。我已經編輯了一些答案,以便說清楚。 – prashantsunkari 2013-04-25 21:52:40