2016-08-23 8 views
0

私は2つのテーブルを持っています。 EndToEndおよびPartPort。私は、EndToEndの同じ行からPartPortAとPartportBのデータを取得し、それらとPartportを照会して、Partportテーブルの任意の行にある可能性のあるPartportから対応するPartGidを取得したいとします。これまではこれを行うことができましたが、2つの異なるLINQ呼び出しを行う必要がありますが、1つに減らしたいと思います。ここに私のコードは次のとおりです。2つのテーブルと複数の列を結合するC#Linqステートメント

// 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); 

私が何をしたい、と私はすでに試みたが、エラーを持っているこれは何です:私が手にエラーがある

   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(); 

Guid? EndToEnd.PartPortB 

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

で行をリンクではありません「icp.PartPortA && icp.PartPortBにica.PortGidに等しいです」これは有効なブール式ではありません。icp.PartPortAはブール値ではなくGuidであるためです。両方の列に参加しようとしていますか? "icp.PartPortAはica.PortGidと等しく、icp.PartPortBはica.PortGidと等しい" – HaukurHaf

+0

インテリセンスはそうではない – DeeTee

+0

おそらく1つはnull可能なguidであり、もう1つはそうではないからです。(.Value null可能なGUID) – HaukurHaf

答えて

2

にはがありません。あなたが「複雑な」比較で参加したい場合は、単にデカルト積(from ... from)を作成し、where

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(); 
関連する問題