2010-06-11 78 views
2

我在C#中使用LINQ時遇到問題,我不斷地收到「指定的轉換無效」。這是我想要做的。C#中LINQ問題#

我創建了一個類,在該類中聲明表的所有列。

 
    [Table(Name="tbl_Aff")] 
    public class Affiliate 
    { 
     [Column] 
     public string name; 
     [Column] 
     public string firstname; 
     [Column] 
     public string surname; 
     [Column] 
     public string title; 
    } 

然後我聲明瞭一個強類型的DataContext,其中我聲明所有表集合作爲上下文的成員。

 
    public partial class Database : DataContext 
    { 
     public Table<Affiliate> affiliate; 

     public Database() : base(Settings.getConnectionString()) { } //This method gets the connection string by reading from an XML file. 
    } 
 
public partial class Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      Database database = new Database(); 

      try 
      { 
       var q = from a in database.affiliate 
         select a; 

       foreach (var aff in q) // Here I get the error "Specified cast is not valid" 
       { 
        lblMessage.InnerHtml += aff.name + "
"; } } catch (Exception ex) { System.Console.WriteLine(ex.Message); } } }
+0

'表'是一個泛型類 - 但是您的代碼似乎聲明瞭一個「Table」類型的變量。 'affiliate'的確切類型是什麼?另外,演員例外對於演員的演出來說有什麼意義? – 2010-06-11 10:16:32

+0

我剛剛編輯了我的代碼,忘記了格式化代碼,謝謝。表是班級會員表的類型。至於演員例外說什麼,它只說「指定的演員是無效的」,沒有別的。也許我應該捕捉到一個不同的例外錯誤? – 2010-06-11 10:26:25

+1

請System.Data.SqlClient.SqlBuffer.get_Int32() 在System.Data.Linq程序發佈異常堆棧跟蹤 – 2010-06-11 10:29:12

回答

3

GetInt32()暗示的tbl_Aff列的至少一個實際上不是一個字符串([n]varchar(...)/[n]text),你沒有給它任何提示。這裏最簡單的技巧就是簡單地扯下那個屬性int(因爲這是它明顯需要的)。

我也想知道是否有更多的Affiliate,你還沒有顯示;接口,基類,單獨的部分類等(因爲那些列看起來應該是應該是是字符串)。

這個問題困擾我的主要時間是當我在數據庫中有(例如)tinyint,並忘記鍵入一個枚舉(在這種情況下爲: byte)。

+0

感謝你們。我已經手動檢查過,類Affiliate中的所有列匹配數據庫中聲明的數據類型,並發現我聲明瞭一些列而不是Int16。再次感謝。 – 2010-06-11 12:00:30