Если я правильно понимаю ваши требования, вам нужно - извлечь значения из таблицы Person, которых нет в Table Student, и добавить их в таблицу NewPerson.
Теперь первое, что нужно подчеркнуть, это использование Intersect. Из MSDN документация
«Результат Intersect будет производить набор пересечения совпадающих значений». Поэтому, пересекая две таблицы, ваш результат чаще всего будет пустым. Еще один важный фактор использования Intersect - это то, что пересекающиеся объекты должны быть одного типа. Например, int, Person или Student и «Anonymous» (это очень важно).
Другая проблема с кодом заключается в том, что вы создаете пустой список NewPerson и добавляете его в таблицу Student.
Я пришел к следующему решению:
получить полный список предметов для студентов и людей
var students = DbContext.Entities.Student().ToList();
var people = DbContext.Entities.Person().ToList();
Вместо Intersect используйте Except, который даст вам набор несовпадающих элементов:
var peopleNotRegisteredAsStudents = people.Select(person => new { person.CountryNo, person.BranchCode }).Except(
students.Select(student => new { student.CountryNo, student.BranchCode })
);
Сопоставить результаты в людяхНе зарегистрированоСтуденты в виде списка NewPerson:
List<NewPerson> personInf = new List<NewPerson>();
foreach (var item in peopleNotRegisteredAsStudents)
{
var tempItem = people.SingleOrDefault(person => person.BranchCode == item.BranchCode && person.CountryNo == item.CountryNo);
if (tempItem != null)
{
NewPerson newPerson = new NewPerson
{
ID = tempItem.ID,
Name = tempItem.Name,
CountryNo = tempItem.CountryNo,
Age = tempItem.Age,
BranchCode = tempItem.BranchCode,
Situation = 0
};
personInf.Add(newPerson);
}
}
А затем добавить в таблицу NewPerson
DbContext.Entities.NewPerson.AddRange(personInf);
DbContext.Entities.SaveChanges();
Если вам нужно добавить результаты NewPerson в таблицу Student, вы можете просто сопоставить значения NewPerson как объекты Student и добавить их в Student.
Надеюсь, это поможет