Subsonic3 LINQ левое внешнее соединение - PullRequest
0 голосов
/ 25 марта 2011

Я использую Subsonic3 и хотел бы получить левое внешнее соединение между двумя таблицами. Вот проверенный SQL

SELECT a.* 
FROM vwVendor a
LEFT OUTER JOIN dbo.pubvenmap b
on a.vend_no = b.vend_no
where b.vend_no is null

Я застрял на

Dim vendors = From v In vwVendor.All()
Join m in pubvenmap.All() On v.vend_no Equals m.vend_no

ОБНОВЛЕНО Я также попробовал следующее

Dim vendors = New SubSonic.Query.Select(SubSonic.Query.Aggregate.GroupBy("vend_no")).From(Of vwVendor).LeftOuterJoin(Of mac_pubvenmap)().ExecuteTypedList(Of vwVendor)()

но получите ошибку

Первое исключение типа 'System.InvalidOperationException' произошло в SubSonic.Core.dll

Я использую Visual Studio 2010 и .NET 4.0 ... может ли это быть проблемой?

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Если выражение LINQ, опубликованное Альбином, доставляет вам проблемы (поставщик LINQ SubSonic не такой полный, как Linq2Sql или Entity Framework), имейте в виду, что вы можете использовать беглые объекты запросов SubSonic для выполнения левого внешнего соединения :

SubSonic.SqlQuery query = new NorthwindDB.Select
  .From<Customer>()
  .LeftOuterJoin<Order>();
  query.Aggregates  = new List<Aggregate> { 
    new Aggregate(CustomerTable.CustomerNameColumn, AggregateFunction.GroupBy) };
0 голосов
/ 25 марта 2011

Все распространенные конструкции LINQ приведены в качестве примера LINQ 101 Samples . Именно в этом случае Left Outer Join .

Если я правильно понял мой ржавый VB, ваш код будет таким:

Dim vendors = From v In vwVendor.All() _
            Group Join m in pubvenmap.All() On v.vend_no Equals m.vend_no Into Group _
            From m In Group.DefaultIfEmpty() _
            Select v
...