Linq левое внешнее соединение

#vb.net #linq #join #database-table

#vb.net #linq #Присоединиться #база данных-таблица

Вопрос:

В конечном счете, мне нужна была универсальная функция, которая принимала бы два datatable и и 2 tablekeys и возвращала объединенный datatable. Итак, вот мой первый шаг к ее решению.

Как я могу написать пример Linq следующего примера T-SQL в VB?

 SELECT * FROM
Table1
LEFT OUTER JOIN
Table2
ON Table1.key = Table2.key
  

Ответ №1:

Это было бы что-то вроде этого:

 Dim JoinedResult = From t1 In Table1 
    Group Join t2 In Table2 
       On t1.key Equals t2.key 
       Into RightTableResults = Group 
    From t2 In RightTableResults.DefaultIfEmpty 
    Select t1.Prop1, 
       t2.Prop2        
  

Я не специалист по VB (больше), но я думаю, что это сработало бы.

Комментарии:

1. Спасибо за ответ. Здесь я немного запутался. что такое Prop1 и Prop2? являются ли они столбцами? Проблема, с которой я сталкиваюсь, заключается в том, что я не могу выбрать столбцы, поскольку я пытаюсь написать универсальную функцию.

2. Prop1 и Prop2 были просто примерами столбцов в ваших таблицах. Читая ваш вопрос еще раз, я вижу, что вам нужна универсальная функция. Я постараюсь что-нибудь придумать.

Ответ №2:

Вы можете просто использовать существующий метод соединения

 public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
    this IEnumerable<TOuter> outer,
    IEnumerable<TInner> inner,
    Func<TOuter, TKey> outerKeySelector,
    Func<TInner, TKey> innerKeySelector,
    Func<TOuter, TInner, TResult> resultSelector
)
  

например:

 table1.Join(table2, t1 => t1.Key, t2 => t2.Key, (t1, t2) => new { Table1 = t1, Table2 = t2 });
  

можете найти больше перегрузок и примеров http://msdn.microsoft.com/en-us/library/system.linq.enumerable.join.aspx

Прошу прощения за примеры c #

Комментарии:

1. кстати, это не левое внешнее соединение