2016-11-24 1 views
0

Ich habe eine Tabelle namens CustomerGroup, die eine Viele-Viele-Beziehung mit der Tabelle contact_List hat. Eine dritte Tabelle CustomerGroupContact hat die Primärschlüssel beider Tabellen.Abfrage viele zu viele Beziehung mit Linq

Hier ist, was die CustomerGroup Tabelle wie folgt aussieht:

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; } 

} 

Hier ist, was Contact_List Modell wie folgt aussieht:

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; } 

} 

Ich versuche, die zwei Tabellen zu verknüpfen, ein Objekt zu erstellen, die aussehen wird das Modell unten:

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

Ich habe Schwierigkeiten, die richtige Abfrage-Anweisung zu verwenden wird basierend auf der Eigenschaft customer_code der Tabelle hinzugefügt. Ich würde jede Art von Hilfe zu schätzen wissen.

+1

Ich sehe, Sie haben einen '[Key]' Attribut auf einer Eigenschaft, werden Sie ein ORM (wie Entitätsrahmen) –

+0

http://pastebin.com/gYktMKyA. Dies ist, was ich bisher habe, aber ich weiß, es ist so eklatant falsch – psyoptica

+0

@RemyGrandin Ja, ich benutze EF mit Code ersten Modell. – psyoptica

Antwort

-1

Hoffnung dies funktionieren würde:

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

Ausgezeichnet. Genau das habe ich gesucht. – psyoptica

0

Würde das funktionieren?

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

können Sie den Code ein wenig erklären? – psyoptica

+0

Was ist x und y im obigen Kontext? – psyoptica

+0

Das sind [Lambda-Ausdrücke] (https://msdn.microsoft.com/en-us/library/bb397687.aspx). LINQ dreht sich tatsächlich um lambdas :) Hier bedeutet 'x => x.Customer_Code ', dass wir die Eigenschaft' Customer_Code' als gemeinsamen Schlüssel aus dem Enumerable 'contactLists' nehmen (wobei Elemente vom Typ' Contact_List' sind). Dann bedeutet "y => y.Customer_Code", dass wir auch die Eigenschaft 'Customer_Code' als gemeinsamen Schlüssel aus dem aufzählenden' customerGroups' nehmen (wobei Elemente vom Typ 'CustomerGroup' sind). – bashis

1

Versuchen folgende:

  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

Können Sie bitte den Code nur ein wenig erklären. Ich verstehe diese Zeile nicht "wählen Sie neu {groupName = g.Customer_Group_Name, c})" –

+0

Es tut genau, was sagt, dass es tut. Ein neues Objekt wird erstellt, wobei groupName der Wert aus der CustomerGroup-Klasse ist und c und c die Contact_List-Zeile (n) mit demselben Customer_Code sind. – jdweng