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
                      });

基本上,我正在尝试加入 3 个表,如您所见:ad、pcs、prd。如果 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 回答