亚音速3.0左连接

时间:2009-07-16 11:05:39

标签: subsonic subsonic3

尝试使用linq在子声道中进行左连接,但它似乎不起作用,我收到一个很大的错误。

我很确定查询是正确的,因为我已经使用对象和Linq2Sql完成了几次。

            var post = from p in Post.All()
                        join q in Quote.All() on p.ID equals q.PostID into pq
                        where p.ID == id.Value
                        from qt in pq.DefaultIfEmpty()
                        select new {p, qt};

似乎亚音速不能从左连接linq查询生成所需的SQL。

我在这里做错了吗?有工作吗?

更新:我在使用亚音速3.0.0.2这是我在尝试使用亚音速左连接时出现的错误

表达式'System.Collections.Generic.IEnumerable 1[GetAQuote.Post]' cannot be used for parameter of type 'System.Linq.IQueryable 1 [GetAQuote.Post]'方法'System.Linq.IQueryable 1[<>f__AnonymousType2 2 [GetAQuote.Post,System.Collections.Generic .IEnumerable 1[GetAQuote.Quote]]] GroupJoin[Post,Quote,Int32,<>f__AnonymousType2 2](System.Linq.IQueryable 1[GetAQuote.Post], System.Collections.Generic.IEnumerable 1 [GetAQuote.Quote],System.Linq.Expressions.Expression 1[System.Func 2 [GetAQuote.Post,System.Int32]] ,System.Linq.Expressions.Expression 1[System.Func 2 [GetAQuote.Quote,System.Int32]],System.Linq.Expressions.Expression 1[System.Func 3 [GetAQuote.Post,System.Collections.Generic.IEnumerable 1[GetAQuote.Quote],<>f__AnonymousType2 2 [GetAQuote.Post,System.Collections.Generic.IEnumerable`1 [GetAQuote.Quote]]]])'

4 个答案:

答案 0 :(得分:4)

我有一个左手连接的分叉,我将在接下来的几天内拉开 - 给我一个星期的时间,然后再推出另一个版本。

答案 1 :(得分:3)

在这里复兴一个旧主题,但是对于那些后来搜索的人来说,有一种不同的语法似乎在SubSonic3中正确地用于左外连接。

而不是原始帖子中的Linq表达式:

        var post = from p in Post.All()
                    join q in Quote.All() on p.ID equals q.PostID into pq
                    where p.ID == id.Value
                    from qt in pq.DefaultIfEmpty()
                    select new {p, qt};

将其重写为:

        var post = from p in Post.All()
                    from q in Quote.All().Where(x => x.PostID == p.ID).DefaultIfEmpty()
                    where p.ID == id.Value
                    select new {p, q};

希望这有助于某人!

答案 2 :(得分:1)

我认为它是一个错误而不会受到Subsonic的支持。在做其他事情here

时,我遇到了同样的问题

答案 3 :(得分:0)

似乎仍然没有针对此的修复。一个简单的修复(脏的,虽然是脏的)是创建一个处理左连接的视图,并使用默认数据从右边填充空数据,并让SubSonic在该视图上进行简单连接。

我知道这很糟糕,但现在已经解决了。由于这种限制,我无法看到丢弃SubSonic。我相信很快就会修好。