尝试使用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]]]])'
答案 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。我相信很快就会修好。