Subsonic3 LINQ左外连接

时间:2011-03-25 20:12:11

标签: vb.net linq subsonic3 left-join

我正在使用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 个答案:

答案 0 :(得分:1)

如果发布的LINQ表达式Albin给您带来麻烦(SubSonic的LINQ提供程序不像Linq2Sql或Entity Framework那样完整),请注意您可以使用SubSonic's fluent query objects执行左外连接:

SubSonic.SqlQuery query = new NorthwindDB.Select
  .From<Customer>()
  .LeftOuterJoin<Order>();
  query.Aggregates  = new List<Aggregate> { 
    new Aggregate(CustomerTable.CustomerNameColumn, AggregateFunction.GroupBy) };

答案 1 :(得分:0)

所有常见的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