2009-11-13 3 views
0

У меня есть таблица под названием ASB и таблица под названием PeopleInvolved. Существует таблица соединений, называемая PeopleInvolved_ASB, которая просто содержит столбец ASBID и PeopleInvolvedID. Столбцы действуют как составной первичный ключ.Entity Framework - много для многих вопросов

Дизайнер не показывает таблицу соединений (как и ожидалось). Я хочу получить список PeopleInvolved на основе ASBID.

Для извлечения людей, я делаю это:

// This top line gets the ASB record from the Case 
var asbRecord = (from c in dd.Case 
         where c.CaseID == caseID 
         select c.ASB).First(); 

     var asbID = asbRecord.Select(asb => asb.ASBID).First(); 

     var people = (from asb in dd.ASB 
         where asb.ASBID == asbID 
         select asb.PeopleInvolved); 

Теперь, что я хочу сделать, это добавить каждый PeopleInvolved запись в простой список типа PeopleInvolved. Я не могу этого сделать. Я получаю:

Ошибка 4 Не удается преобразовать тип «System.Data.Objects.DataClasses.EntityCollection» до «Dynamic.PeopleInvolved»

Как я могу получить простой список PeopleInvolved в общий список, который я могу вернитесь к моему контроллеру?

Thanks,

ответ

1

Это то, что вы хотите сделать?

List<PeopleInvolved> genericPeopleInvolvedList = (from asb in dd.ASB 
          where asb.ASBID == asbID 
          select asb.PeopleInvolved).ToList(); 

[Обновлено: ответил плохо, прежде]

Просто понял, что asb.PeopleInvolved это коллекция не единое целое (блин!). Таким образом, предыдущий запрос linq возвращает CollectionS объектов PeopleInvolved. Так как вы выбираете по Aspid должен быть только один asb.ASBID что FULLFILL где положение asb.ASBID == asbID, и вы можете сделать следующее:

var listWithCollectionOfPeopleInvolved = (from asb in dd.ASB 
           where asb.ASBID == asbID 
           select asb.PeopleInvolved).ToList(); 

List<PeopleInvolved> peopleInvolved = listWithCollectionOfPeopleInvolved.First().ToList(); 

Но это гораздо лучше, если вы делаете это с помощью Include:

var asbInstance = (from asb in dd.ASB.Include("PeopleInvolved") 
         where asb.ASBID == asbID 
         select asb).FirstOrDefault(); 
foreach(PeopleInvolved pi in asbInstance.PeopleInvolved) 
{ 
//do your stuff 
} 

С Приложением автоматически загружать связанные свойства.

+0

Вот что я изначально, но потом, когда я пытаюсь Еогеасп: Еогеаспа (PeopleInvolved людей в людях) { // Сделайте что-нибудь } Я получаю ошибку преобразования упомянутую выше. – Paul

1

Основываясь на ошибке, которую вы сообщаете, я предполагаю, что PeopleInvolved - это коллекция. Так что попробуйте это:

var people = (from asb in dd.ASB 
        where asb.ASBID == asbID 
        from pi in asb.PeopleInvolved 
        select pi).ToList(); 

Я думаю, что это чрезвычайно запутанным иметь как тип с именем PeopleInvolved и коллекцию такого типа с точно таким же именем. Аналогичным образом, кажется, у вас есть тип, называемый ASB, и набор объектов, содержащий много экземпляров этого типа с тем же именем,

Гораздо понятнее сделать имена объектов множеств множественными и именами типов единичными.

Если я догадался, что неправильные типы, пожалуйста, уточните расположение ASB и Dynamic.PeopleInvolveed.

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