2012-06-13 9 views
1

У меня есть имена таблиц TestNotifications, у которых есть CompanyID и TestCompanyID. Эти идентификаторы ссылаются на таблицу компаний, в которой есть столбец companyName. Мне нужно получить название компании для компании и компании TestCompany. Код ниже не работает, я получаю неявное преобразование ошибки. Любая помощь оценивается.LINQ объединяет несколько таблиц в одном столбце

testNotifications = from t in db.CT_TestNotifications 
    join c in db.CT_Companies on t.CompanyID equals c.CompanyID 
    join tc in db.CT_Companies on t.TestCompanyID equals tc.CompanyID 
    select new 
    { 
     t.TestNotificationID, 
     c.CompanyName, 
     //tc.CompanyName 
     TestCompanyName = tc.CompanyName 
    }; 

Здесь ошибка:

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 
'System.Linq.IQueryable<CT_TestNotification>'. An explicit conversion exists 
(are you missing a cast?) 
+0

Запрос выглядит нормально ... можете ли вы предоставить трассировку стека, пожалуйста? – bluevector

ответ

0

Смотрите, если ваш присоединиться по критериям, имеют те же типы - ИЭ t.CompanyID ИНТ и c.CompanyID.

+0

все они int – user1202606

3

Вы проектируете анонимный тип, но testNotifications ожидает CT_TestNotification.

Попытка создания экземпляра CT_TestNotification в вашем select:

testNotifications = from t in db.CT_TestNotifications 
    join c in db.CT_Companies on t.CompanyID equals c.CompanyID 
    join tc in db.CT_Companies on t.TestCompanyID equals tc.CompanyID 
    select new CT_TestNotification  // Here's the major difference 
    { 
     PropName = t.TestNotificationID, // PropName must be changed to the 
     PropName = c.CompanyName,  // properties of your actual class 
     //tc.CompanyName 
     TestCompanyName = tc.CompanyName 
    }; 
+0

Если я это сделаю, то он говорит, что CT_TestNotification не содержит определения свойств, не входящих в эту таблицу .... – user1202606

+0

решил это, это было проблемой выше в моем коде. – user1202606

0

Я подозреваю, что проблема заключается в том, как вы объявили testNotifications. Если вы сделали что-то вроде следующего, вы бы увидели, что ошибка:

IQueryable<CT_TestNotifications> testNotifications; 

testNotifications = from t in db.CT_TestNotifications 
    join c in db.CT_Companies on t.CompanyID equals c.CompanyID 
    join tc in db.CT_Companies on t.TestCompanyID equals tc.CompanyID 
    select new 
    { 
     t.TestNotificationID, 
     c.CompanyName, 
     //tc.CompanyName 
     TestCompanyName = tc.CompanyName 
    }; 

Вы также можете получить этот же вопрос, если вы объявили testNotifications на старте, а затем продолжил с запросом позже, потому что вы пытаетесь изменить тип значения от известного типа для анонимного типа .:

var testNotifications = db.CT_TestNotifications; 
    testNotifications = from t in testNotifications 
     join c in db.CT_Companies on t.CompanyID equals c.CompanyID 
     join tc in db.CT_Companies on t.TestCompanyID equals tc.CompanyID 
     select new 
     { 
      t.TestNotificationID, 
      c.CompanyName, 
      //tc.CompanyName 
      TestCompanyName = tc.CompanyName 
     }; 

Поскольку вы проектируете анонимный тип, вам нужно использовать определение типа и явно не объявить переменные:

var testNotifications = from .. select ..; 
Смежные вопросы