2

linq を使用して subsonic で左結合を実行しようとしていますが、うまくいかないようで、大きなエラーが発生します。

オブジェクトと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};

subsonic は、左結合 linq クエリから必要な SQL を生成できないようです。

ここで何か間違ったことをしていますか?回避策はありますか?

更新: subsonic 3.0.0.2 を使用しています。これは、subsonic で左結合を試行したときに表示されるエラーです。

1[GetAQuote.Post]' cannot be used for parameter of type 'System.Linq.IQueryableメソッド 'System.Linq.IQueryable 2[ GetAQuote.Post 1[<>f__AnonymousType2,System.Collections.Generic.IEnumerable 1[GetAQuote.Quote]]] GroupJoin[Post,Quote,Int32,<>f__AnonymousType22](System.Linq.IQueryable 1[GetAQuote.Post], System.Collections.Generic.IEnumerable1[GetAQuote .Quote]、System.Linq.Expressions.Expression 1[System.Func2[GetAQuote.Post、System.Int32]]、System.Linq.Expressions.Expression 1[System.Func2[GetAQuote.Quote、System.Int32]]、System.Linq.Expressions.Expression 1[System.Func3 [GetAQuote.Post,System.Collections.Generic.IEnumerable 1[GetAQuote.Quote],<>f__AnonymousType22[GetAQuote.Post,System.Collections.Generic.IEnumerable`1[GetAQuote.Quote]]]])'

4

4 に答える 4

4

レフト ジョイン用のフォークがあり、今後数日のうちに引っ張る予定です。1 週間待ってください。これで別のリリースをプッシュします。

于 2009-07-19T06:21:01.413 に答える
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};

うまくいけば、これは誰かを助けます!

于 2011-05-05T17:43:53.940 に答える
1

これはバグであり、Subsonic でサポートされる予定はないと思います。ここで他のことをしているときに同じ問題がありました

于 2009-07-16T11:49:30.573 に答える
0

これに対する修正はまだ行われていないようです。簡単な修正 (汚いものではありますが) は、左側の結合を処理し、右側の空のデータをデフォルト データで埋めるビューを作成し、SubSonic にそのビューで単純な結合を行わせることです。

私はそれがひどいことを知っていますが、今のところ修正しています。この制限により、SubSonic がドロップされることはありませんでした。すぐに修正されると確信しています。

于 2010-01-25T02:32:58.883 に答える