none
請問一下有關linq 的一個小問題 RRS feed

  • 問題

  •  var fee = from s1 in _db.wcurstu
    join s2 in _db.wcurfee on s1.fee_chc equals s2.chc_num
    select s1;
    


    fee_chc  跟  chc_num 在database 裡面是tinyint 

    到程式裡面寫他幫他們轉乘 Byte 型態

    但是我讓他們兩個當條件做join 時就會出現

     

    LINQ to Entit
    ies 查詢中兩個結構不相容的初始設定中。型別在同一查詢中可以在兩個地方初始化,但是在這兩個地方必須設定相同的屬性,而且這些屬性必須是以相同的順序設定。

    如果我將它們改成

     var fee= from s1 in _db.wcurstu
                 join s2 in _db.wcurfee on new { s1.fee_chc } equals new { s2.chc_num }
                 select s1;
    

    join 子句中其中一個運算式的型別不正確。呼叫 'Join' 時發生型別推斷失敗。

    請問為何會這樣,目前我遇到的只有 Byte 的型別會無法 join 這是為什麼呢???


     

    • 已移動 91MVP 2011年6月24日 上午 02:19 詢問LINQ問題 (從:ASP.NET 與 AJAX(ASP.NET and AJAX))
    2011年6月24日 上午 02:12

所有回覆

  • 幫您轉到Linq版面。
    常用資源參考:
    小弟的blog: In 91,wiki: my wiki
    2011年6月24日 上午 02:19
  • 這兩個欄位的Nullable是一樣的嗎?

    2011年6月24日 上午 02:47
  • 阿尼您好 : 是一樣的
    2011年6月24日 上午 02:54
  • Hi,

    我問一下

    你的意思是你的程式不變

    使用同樣的Linq表示式

    若只把資料庫的欄位改為Byte以外的型態

    在不改程式的狀況下,整個運作就正常?


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月24日 上午 03:14
  • 在EF中join作法建議你改變觀念,不要用SQL的語法觀念來撰寫LINQ

    在Modal中設計時

    wcurfee 應該會有個屬性對應至 wcurstu 假設名稱為a

    則上述語法可以變成

    var q = from s in _db.wcurfee

               select  s.a;

     


    2011年6月24日 上午 03:18
  • 蹂躪您好:  是的,同樣的Linq表示式,若把資料庫的欄位改為byte 以外的型態
       就可以正常
    2011年6月24日 上午 05:16
  • programlin您好: 您的意思是說 在Model 設計時 直接將兩個table 做關聯,然後改變語法試試嗎?

    2011年6月24日 上午 05:18
  • Hi,

    印象中Linq To Sql會將Linq運算式編譯成SQL語法

    有時候Linq運算式內含有一些Function Call之類的動作時

    因為無法將Linq運算式編譯成SQL語法

    這時就會出錯

     

    但是你既然是相同的運算式~相同的程式~差異只在資料庫欄位型態

    個人是覺得看起來不太像是你的問題

    也許可考慮到Microsoft Connect去詢問看看


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年6月24日 上午 05:24
  •  var fee = from s1 in _db.wcurstu
    join s2 in _db.wcurfee on s1.fee_chc equals s2.chc_num
    select s1;
    


    fee_chc  跟  chc_num 在database 裡面是tinyint 

    到程式裡面寫他幫他們轉乘 Byte 型態

    但是我讓他們兩個當條件做join 時就會出現

     

    LINQ to Entit
    ies 查詢中兩個結構不相容的初始設定中。型別在同一查詢中可以在兩個地方初始化,但是在這兩個地方必須設定相同的屬性,而且這些屬性必須是以相同的順序設定。

    如果我將它們改成

     

     var fee= from s1 in _db.wcurstu
        join s2 in _db.wcurfee on new { s1.fee_chc } equals new { s2.chc_num }
        select s1;
    

    join 子句中其中一個運算式的型別不正確。呼叫 'Join' 時發生型別推斷失敗。

    請問為何會這樣,目前我遇到的只有 Byte 的型別會無法 join 這是為什麼呢???


     

     

    剛做了實驗兩個tinyint的欄位做join並沒有發現您所說的問題,我想可能是其他原因所造成。
    另外,兩個ObjectSet做join如果只是單一欄位,不需要使用new {欄位名稱},兩個以上的欄位做join才需要。
    或許你可以開一個新的專案以比較乾淨的環境來測試,如果還是有問題可以把專案加上建立TABLE的SQL語法貼上來,大家才比較好幫你找出問題點。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年6月24日 上午 07:56