2010-06-11 2 views
2

Я столкнулся с проблемой при использовании LINQ в C#, я постоянно получаю «Указанный приказ недействителен». Это то, что я пытаюсь сделать.Проблема с LINQ в C#

Я создаю класс, в котором я объявляю все столбцы таблицы.

 
    [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'. Какой именно тип «аффилированного лица»? Кроме того, что делает исключение листинга в терминах того, что он пытается использовать из/в? –

+0

Я только что редактировал свой код, забыл форматировать код, sry. Таблица относится к категории классов. Партнерская таблица . Что касается того, что говорится в исключении cast, в нем говорится, что только «Указанный приведение недействительно» и ничего больше. Может быть, я должен поймать ошибку в другом исключении? –

+1

Пожалуйста, пост стека исключений трассировки –

ответ

3

GetInt32() предполагает, что по крайней мере один из столбцов tbl_Aff не на самом деле строка ([n]varchar(...)/[n]text), и вы не дали ему никаких намеков. Простейший трюк здесь состоит в том, чтобы просто прославить это свойство int (поскольку это то, что он явно хочет).

Мне также интересно, есть ли еще Affiliate, которые вы не указали; интерфейсы, базовые классы, отдельный частичный класс и т. д. (поскольку эти столбцы выглядят так, как должны быть строками).

Главное, что эта проблема укусит меня, когда у меня есть (например) tinyint в БД и забудьте ввести перечисление соответственно (: byte в этом случае).

+0

Спасибо за это .. Я вручную проверил, что все столбцы класса Affiliate соответствуют типам данных, объявленным в базе данных, и выяснили, что я объявлял некоторые столбцы как int вместо Int16. Еще раз спасибо. –

Смежные вопросы