Сравнивать сущность кроме как и вставлять проблему? - PullRequest
0 голосов
/ 07 ноября 2018

Имя базы данных: S

Таблица: СТУДЕНТ

ID   NAME   COUNTRYNO   AGE   BRANCHCODE
----------------------------------------
1    Alex    001        25       05
2    Mary    002        26       09

Имя базы данных: P

Таблица ЧЕЛОВЕК :

 NAME   COUNTRYNO   AGE   BRANCHCODE  
------------------------------------------
 John     127        45      04
 Elize    125        54      06

Я хочу новую таблицу:

Имя базы данных: S

Стол NEWPERSON

 NAME   COUNTRYNO   AGE   BRANCHCODE  SITUATION
----------------------------------------------------
 John     127        45      04          0
 Elize    125        54      06          0

Я хочу сравнить две таблицы (countryno и branchcode), и, если у меня нет значений второй таблицы, добавьте их в новую таблицу и получите ситуацию 0.

Но этот код не запускается. Как решить в Entity Framework?

var student=DbContext.Entities.Student.Select(a=> new { CountryNo =a.CountryNo, BranchCode=a.BranchCode
});     ------>  //studentcount:0

var person=DbContext.Entities.Student.Select(a=> new { CountryNo =a.CountryNo, BranchCode=a.BranchCode
});     ----> //personcount:0

var common=person.Except(student);   -----> //common:0

List<NEWPERSON> np= new List<NEWPERSON>();   ---> np:0
foreach(var item in common)   //it doesnt enter loop
{
    var ıtem=person.Single(persons=>persons.PERSON==item.PERSON && persons.CountryNo==item.CountryNo);
if(tempItem !=null)
{
    NEWPERSON newperson=new NEWPERSON
{  
     CountryNo=item.CountryNo,
     BranchCode=item.BranchCode,
     Age=item.Age,
     Name=item.Name,
     Situation=0
}
np.Add(newperson);
}

}

1 Ответ

0 голосов
/ 08 ноября 2018

Если я правильно понимаю ваши требования, вам нужно - извлечь значения из таблицы 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.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...