0

このコードを実装するのに苦労しています。誰かが助けてくれれば、本当に感謝します。

var result = (from fv in db.UsFavourites.Where(m => m.UserID == currentUserId)
                      join ad in db.CtArticleDetails.Where(m => m.ArticleStatusId == ConfigHelper.Published) on fv.ArticleReferenceID equals ad.ArticleReference
                      join pcs in db.PcPages.Where(m => m.Status == ConfigHelper.Published) on fv.PageReferenceID equals pcs.Reference
                      join prd in db.PrProducts.Where(m => m.ProductStatusID == ConfigHelper.Published) on fv.ProductReferenceID equals prd.ProductReference
                      select new FavouriteModel
                      {
                          FavouriteId = fv.FavouriteID,
                          Title = ad.Title ?? pcs.PageName ?? prd.Name,
                          Url = ad.Title ?? pcs.PageName ?? prd.Name,
                          ArticleReferenceID = (int)fv.ArticleReferenceID,
                          PageReferenceID = (int)fv.PageReferenceID,
                          ProductReferenceID = (int)fv.ProductReferenceID
                      });

基本的に、ご覧のとおり、ad、pcs、prd の 3 つのテーブルを結合しようとしています。PCS が存在しない場合、コードは無視する必要があります。誰でもアドバイスできますか?

明確にするためにデータベース設計を追加しました: ここに画像の説明を入力

4

1 に答える 1

1

私はあなたが左の結合をしようとしていると思います

  • pcs db.PcPages

  • ad db.CtArticleDetails

DefaultIfEmpty左結合にするために使用されます

var result = (from fv in db.UsFavourites.Where(m => m.UserID == currentUserId)
                      from ad in db.CtArticleDetails.Where(m => m.ArticleStatusId == ConfigHelper.Published) 
                                                    .Where(m => fv.ArticleReferenceID == m.ArticleReference)
                                                    .DefaultIfEmpty()
                      from pcs in db.PcPages.Where(m => m.Status == ConfigHelper.Published)
                                            .Where(m => fv.PageReferenceID == m.Reference)
                                            .DefaultIfEmpty()
                      join prd in db.PrProducts.Where(m => m.ProductStatusID == ConfigHelper.Published) on fv.ProductReferenceID equals prd.ProductReference
                      select new FavouriteModel
                      {
                          FavouriteId = fv.FavouriteID,
                          Title = ad.Title ?? pcs.PageName ?? prd.Name,
                          Url = ad.Title ?? pcs.PageName ?? prd.Name,
                          ArticleReferenceID = (int)fv.ArticleReferenceID,
                          PageReferenceID = (int)fv.PageReferenceID,
                          ProductReferenceID = (int)fv.ProductReferenceID
                      });
于 2012-09-18T16:07:09.800 に答える