2016-08-23 4 views
0

У меня есть две таблицы; EndToEnd и PartPort. Я хотел бы получить данные PartPortA и PartportB из одной и той же строки в EndToEnd и запросить с ними Partport и получить их соответствующий PartGid из Partport, который может быть в любой строке в таблице Partport. Пока что я могу это сделать, но мне нужно сделать два разных вызова LINQ, но я хотел бы уменьшить их до одного. Вот мой код:Оператор 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

Intellisense, похоже, не нравится – DeeTee

+0

Возможно, потому что один из них является NULL, а другой не ... (Используйте .Value nullable 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(); 
Смежные вопросы