2017-11-08 21 views
1

データベースにCompanyEmployeeの2つのモデルがあります(1社は多くの従業員を持つことができます)。1対多のクエリ、Linq、Entity Framework

私は従業員とその企業のリストを取得し、すべての従業員情報や関連会社へのアクセス権を持っている(人は私の従業員のモデルである[テーブルの人々と呼ばれている]、会社 - 会社のモデル)にしたい

だから私は書きました:

List<Person> people = new List<Person>(); 

using (var db = new DataContext()) 
{ 
    var list_of_people = db.People; 

    foreach (Person p in list_of_people) 
    { 
     people.Add(p); 
    } 
} 

は、今私はPersonオブジェクトのリストを持っているが、それは会社名についての情報を持っていません。

従業員とその会社のリストを取得する方法を教えてもらえますか?

そのクエリは何を返しますか? DbSet?より慣用的に

public class Person 
    { 
     public Person() 
     { 

     } 
     public int PersonId { get; set; } 
     public string Name { get; set; } 
     public string Surname { get; set; } 
     public string Job { get; set; } 
     public int Phone { get; set; } 
     public int Mobile { get; set; } 

     public Company Company { get; set; } 
    } 

public class Company 
    { 
     public Company() 
     { 

     } 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public int NIP { get; set; } 
     public string Address { get; set; } 
     public string City { get; set; } 
     public int Code { get; set; } 
     public int Phone { get; set; } 
     public string Notes { get; set; } 

     public ICollection<Person> Person { get; set; } 
    } 
+0

はあなたが人々のモデルを表示することができます:あなたが反復したい場合は今

using (var db = new DataContext()) { var peopleWithCompany = db.People.Include(p => p.Company).ToList(); } 

:あなたはナビゲーションプロパティを持っているので、非常に簡単です人々と自分の会社の?最初にコードを使用するのかデザイナーを使用しますか? –

+1

あなたのモデルが正しいと仮定すると、 'var people = db.People.Include(p => p.Company).ToList();'を実行することができます。 –

+0

こんにちは、遅い回答をおかけして申し訳ありません: 私はEFを使用してデータベースを作成しました。最初のコードはコードです(私はPythonのdjangoフレームワークを使用しています)。 前の投稿を編集して自分のモデルを表示しました。 –

答えて

0

、あなたがCompanyからPersonからEFに接続されていない、あなたは左を行うことができますと仮定

List<Person> people; 

using (var db = new DataContext()) { 
    people = db.People.ToList(); 
} 

参加:

var employeesWithCompany = from p in db.People 
          join c in db.Company on p.CompanyID == c.ID into cj 
          from c in cj.DefaultIfEmpty() 
          select new { p, c }; 
0

今私のためにこれを行った:

using (var db = new DataContext()) 
{ 
    var new_list = from p in db.People 
        join c in db.Companies on p.Company.Id equals c.Id 
        select new { p, c }; 
} 

このコードは動作しますが、私はLinqPadでそれをチェックして、それが良い結果を示しているが、私はまた、私は私が私が持っている関係を使用していないどのように感じるかnew_listに反復してデータを取得するために、私は:(

をしたい見当がつかない私のモデルに入れていた。私は1対多の関係を持っている場合、会社データを追加クエリすることなくPeopleモデルを使用する会社に関するすべての情報に即座にアクセスする必要があります。

0

リストが必要な場合

foreach (var currentPerson in peopleWithCompany) 
{ 
    var personName = currentPerson.Name; 
    var job= currentPerson.Job; 
    ... 
    var companyName = currentPerson.Company.Name; 
    var companyAddress = currentPerson.Company.Address; 
    ... 
} 
+0

'new_list = db.People.Include(p => p.Company).ToList();を使用すると、ラムダ式をデリゲート型ではないため 'string'型に変換することはできません" –

+0

Damn .... using System.Data.Entity'これを修正しました! ありがとう! –

関連する問題