2016-08-23 3 views
0

Ich habe zwei Tabellen; EndToEnd und PartPort. Ich möchte die PartPortA- und PartportB-Daten aus derselben Zeile in EndToEnd abrufen und Partport mit ihnen abfragen und ihr entsprechendes PartGid von Partport abrufen, das in einer beliebigen Zeile in der Partport-Tabelle enthalten sein könnte. Bisher bin ich dazu in der Lage, aber ich muss zwei verschiedene LINQ-Aufrufe machen, aber ich möchte es auf eins reduzieren. Hier ist mein Code:C# Linq Anweisung, zwei Tabellen und mehrere Spalten zu verbinden

// this demonstrates how to join two tables, however only works for one AssetportGid at a time 
    var part_portGid_a_results = (from icp in entities.EndToEnd 
        where icp.IntertPortGidA != null && 
        icp.IntertPortGidB != null 
        join ica in entities.PartPort 
        on icp.PartPortA equals ica.PortGid 
        select new { icp.PartPortA, ica.PartGid, }).ToList(); 

    var part_portGid_b_results = (from icp in entities.EndToEnd 
            where icp.IntertPortGidA != null && 
            icp.IntertPortGidB != null 
            join ica in entities.PartPort 
            on icp.PartPortB equals ica.PortGid 
            select new { icp.PartPortA, ica.PartGid, }).ToList(); 



    return Json(part_portGid_a_results, JsonRequestBehavior.AllowGet); 

Was ich tun möchte, und ich habe bereits versucht, bekam aber einen Fehler, ist dies:

   var part_portGid_a_results = (from icp in entities.EndToEnd 
        where icp.IntertPortGidA != null && 
        icp.IntertPortGidB != null 
        join ica in entities.PartPort 
        on icp.PartPortA && icp.PartPortB equals ica.PortGid 
        select new { icp.PartPortA, ica.PartGid, }).ToList(); 

Der Fehler, den ich bekommen ist:

Guid? EndToEnd.PartPortB 

Error: 
    Operator '&&' cannot be applied to operands of type 'System.Guid' and 'System.Guid?' 
+0

„auf icp.PartPortA && icp.PartPortB gleich ica.PortGid“ ist nicht Korrekt, es ist kein gültiger boolescher Ausdruck, da icp.PartPortA eine GUID und kein boolescher Wert ist. Versuchen Sie, sich beiden Spalten anzuschließen? Dann versuchen Sie dies stattdessen: "auf icp.PartPortA entspricht ica.PortGid && icp.PartPortB gleich ica.PortGid" – HaukurHaf

+0

Intellisense scheint nicht zu mögen – DeeTee

+0

Wahrscheinlich, weil man eine Nullable Guid ist und das andere ist nicht ... (Use .Value nullbare Guid) – HaukurHaf

Antwort

2

Sie haben keine haben zu verwenden, um beizutreten. Wenn Sie mit einem „Komplex“ Vergleich teilnehmen möchten, machen nur ein kartesisches Produkt (from ... from) und verknüpfen die Zeilen durch eine where Klausel

var part_portGid_results = (from icp in entities.EndToEnd 
          where icp.IntertPortGidA != null && 
          icp.IntertPortGidB != null 
          from ica in entities.PartPort 
          where icp.PartPortA == ica.PortGid 
           || icp.PartPortB == ica.PortGid 
          select new { icp.PartPortA, ica.PartGid, }).ToList(); 
Verwandte Themen