2016-11-24 12 views
0

テーブルcontact_Listと多対多リレーションシップを持つCustomerGroupという名前のテーブルがあります。 3番目のテーブルCustomerGroupContactには、両方のテーブルの主キーがあります。ここでLinqとの多対多のリレーションシップ

はCustomerGroupテーブルは次のようになります。ここでは

public class CustomerGroup 
{ 
    public CustomerGroup() 
    { 
     CustomerGroupContacts = new HashSet<CustomerGroupContact>(); 

    } 

    [Key] 
    public int Customer_Group_Code { get; set; } 

    public int Customer_Code { get; set; } 

    public string Customer_Group_Name { get; set; } 


    public virtual ICollection<CustomerGroupContact> CustomerGroupContacts { get; set; } 

} 

がContact_Listモデルは次のようになります。

public class Contact_List 
{ 
    [Key] 
    public int Contact_List_Code { get; set; } 

    public int Customer_Code { get; set; } 

    public string First_Name { get; set; } 

    public string Last_Name { get; set; } 

    public string Contact_No { get; set; } 

} 

私は次のようになりますオブジェクトを作成するために、2つのテーブルを結合しようとしています以下のモデル:

public class Contacts 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string ContactNo { get; set; } 
    public string GroupName { get; set; } 
} 

私は正しいクエリ文を使用するのに苦労していますcustomer_codeプロパティに基づいてテーブルを結合します。 何か助けていただければ幸いです。

+1

私はあなたには、いくつかのプロパティの '[キー]'属性を持って見る、あなたは(ORMを使用しているようなエンティティフレームワーク)? –

+0

http://pastebin.com/gYkTmKyA。これは私が今まで持っていたものですが、それほど大変間違っていることがわかります – psyoptica

+0

@RemyGrandinはい私はコードファーストモデルでEFを使用しています。 – psyoptica

答えて

-1

希望:

var userContactList = (from custGroup in _db.CustomerGroup 
          join  cList in _db.Contact_List 
          on custGroup.Customer_Code equals cList.Customer_Code 
          select new Contacts { 
              FirstName = cList.First_Name, 
              LastName = cList.Last_Name, 
              ContactNo = cList.Contact_No, 
              GroupName = custGroup.Customer_Group_Name 
              }).ToList(); 
+0

優れています。これはまさに私が探していたものです。 – psyoptica

0

これは機能しますか?これがうまくいく

private IEnumerable<Contacts> JoinTables(IEnumerable<Contact_List> contactLists, IEnumerable<CustomerGroup> customerGroups) 
{  
    return contactLists.Join(customerGroups, 
          x => x.Customer_Code, 
          y => y.Customer_Code, 
          (x, y) => new Contacts() 
          { 
           ContactNo = x.Contact_No, 
           FirstName = x.First_Name, 
           LastName = x.Last_Name, 
           GroupName = y.Customer_Group_Name 
          }); 
} 
+0

コードを少し説明できますか? – psyoptica

+0

上記の文脈でxとyとは何ですか? – psyoptica

+0

これらは[ラムダ式](https://msdn.microsoft.com/en-us/library/bb397687.aspx)です。 LINQは実際にラムダに関するものです:)ここで 'x => x.Customer_Code'は、列挙可能な' contactLists'(要素は 'Contact_List'型です)から' Customer_Code'プロパティをジョイントキーとして取ります。 'y => y.Customer_Code'は、列挙可能な' customerGroups'(ここで要素は 'CustomerGroup'型です)からジョイントキーとして 'Customer_Code'プロパティを取ることを意味します。 – bashis

1

には、次の試してみてください。

  List<CustomerGroup> groups = new List<CustomerGroup>(); 
      List<Contact_List> contact_list = new List<Contact_List>(); 

      List<Contacts> contacts = (from g in groups 
             join c in contact_list on g.Customer_Code equals c.Customer_Code 
             select new { groupName = g.Customer_Group_Name, c }) 
             .Select(x => new Contacts() { 
              FirstName = x.c.First_Name, 
              LastName = x.c.Last_Name, 
              ContactNo = x.c.Contact_No, 
              GroupName = x.groupName 
             }).ToList(); 
+0

コードをちょっと説明してください。私はこの行を理解していない "select new {groupName = g.Customer_Group_Name、c})" –

+0

それはまさにそれが言うことを言う。新しいオブジェクトが作成され、groupNameはCustomerGroupクラスの値であり、 'c'は同じCustomer_Codeを持つContact_Listの行です。 – jdweng

関連する問題