Присоединяйтесь к LINQ to SQL на нескольких условиях - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть соединение трех таблиц с более чем одним условием объединения.То, что я хочу иметь, это List<MyVM> MyList { get; set; } MyList = (from a in _context.Tab1 join b in _context.Tab2 on a.T1F1 equals b.T2F2 and b.T2F2 equals SomeValue join c in _context.Tab3 on a.T1F2 equals c.T3F1 orderby a.T1F3 select new MyVM() { P1 = a.T1F5, P2 = a.T1F6, P3= b.T2F4 P4 = c.T3F3 } ).ToList();

. Оператор компилируется нормально с единственным условием при первом соединении, но как только я добавляю второе, он жалуется.

В SQL это будет on a.T1F1 = b.T2F2 and b.T2F2 = SomeValue

Кстати, все столбцы в предложениях объединения, а также SomeValue имеют тип int.

Как использовать несколько условий?

1 Ответ

0 голосов
/ 19 ноября 2018

Переместите ваше условие в предложение where:

MyList = (from a in _context.Tab1
    join b in _context.Tab2 on a.T1F1 equals b.T2F2 
    join c in _context.Tab3 on a.T1F2 equals c.T3F1
    where b.T2F2 == SomeValue
    orderby a.T1F3
    select new MyVM()
    {
        P1 = a.T1F5,
        P2 = a.T1F6,
        P3= b.T2F4
        P4 = c.T3F3
    }
).ToList();

Если вы хотите избежать использования выражения where:

MyList = (from a in _context.Tab1
    join b in _context.Tab2 on new { firstKey = a.T1F1, secondKey = SomeValue } equals new { firstKey = b.T2F2, secondKey = b.T2F2 }
    join c in _context.Tab3 on a.T1F2 equals c.T3F1
    orderby a.T1F3
    select new MyVM()
    {
        P1 = a.T1F5,
        P2 = a.T1F6,
        P3= b.T2F4
        P4 = c.T3F3
    }
).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...