LINQ to Entities - 左连接不提取数据

LINQ to Entities - Left join not pulling data

我的 table ClinicalAsset table 不会显示所有结果 + 来自 clinicalPAT table 的任何匹配结果,其中 ClinicalAssetID 是匹配项。

我在 clinicalPAT table 中有一个结果与 ClinicalAsset table 匹配,但仅显示在 MVC 视图中,而不是 ClinicalAsset [=25= 中的 40 个结果]

这是我尝试过的方法:


   var clinicalAssets = (from PATasset in db.ClinicalPATs
                                  join s in db.ClinicalAssets on PATasset.ClinicalAssetID equals s.ClinicalAssetID into output
                                  from j in output.DefaultIfEmpty()


                                  select new ClinicalASSPATVM
                                  {
                                      ClinicalAssetID = PATasset.ClinicalAssetID,
                                      ProductName = j.ProductName,
                                     InspectionDocumnets = PATasset.InspectionDocumnets,
                                 });

 var clinicalAssets = (from PATasset in db.ClinicalPATs
                              join s in db.ClinicalAssets on PATasset.ClinicalAssetID equals s.ClinicalAssetID into output
                              from j in output.DefaultIfEmpty(new ClinicalAsset())


                              select new ClinicalASSPATVM
                              {
                                  ClinicalAssetID = PATasset.ClinicalAssetID,
                                  ProductName = j.ProductName,
                                 InspectionDocumnets = PATasset.InspectionDocumnets,
                             });

    var clinicalAssets = (from PATasset in db.ClinicalPATs
                                  join s in db.ClinicalAssets on PATasset.ClinicalAssetID equals s.ClinicalAssetID 


                                  select new ClinicalASSPATVM
                                  {
                                      ClinicalAssetID = PATasset.ClinicalAssetID,
                                      ProductName = s.ProductName,
                                     Inspect

     var clinicalAssets = from  PATasset in db.ClinicalPATs
                              join s in db.ClinicalAssets on PATasset.ClinicalAssetID equals s.ClinicalAssetID


                              select new ClinicalASSPATVM
                              {
                                  ClinicalAssetID = PATasset.ClinicalAssetID,
                                  ProductName = s.ProductName,
                                 InspectionDocumnets = PATasset.InspectionDocumnets,
                             };

            var clinicalAssets = from s in db.ClinicalAssets
                                  join PATasset in db.ClinicalPATs on s.ClinicalAssetID equals PATasset.ClinicalAssetID


                                  select new ClinicalASSPATVM
                                  {
                                      ClinicalAssetID = PATasset.ClinicalAssetID,
                                      ProductName = s.ProductName,
                                     InspectionDocumnets = PATasset.InspectionDocumnets,
                                 };


        var clinicalAssets = (from s in db.ClinicalAssets
                              join cp in db.ClinicalPATs on s.ClinicalAssetID equals cp.ClinicalAssetID

                              select new ClinicalASSPATVM
                              {
                                  ClinicalAssetID = cp.ClinicalAssetID,
                                  ProductName = s.ProductName,
                                 InspectionDocumnets = cp.InspectionDocumnets,
                             });

这是我的整体控制器:


      public ActionResult DashBoard(string sortOrder, string currentFilter,string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var clinicalAssets = (from s in db.ClinicalAssets
                                  join cp in db.ClinicalPATs on s.ClinicalAssetID equals cp.ClinicalAssetID

                                  select new ClinicalASSPATVM
                                  {
                                      ClinicalAssetID = cp.ClinicalAssetID,
                                      ProductName = s.ProductName,
                                     InspectionDocumnets = cp.InspectionDocumnets,
                                 });


            if (!String.IsNullOrEmpty(searchString))
            {
                clinicalAssets = clinicalAssets.Where(s => s.SerialNo.Contains(searchString)
                                       || s.PoNo.Contains(searchString));
            }

            switch (sortOrder)
            {
                case "name_desc":
                    clinicalAssets = clinicalAssets.OrderByDescending(s => s.PoNo);
                    break;
                case "Date":
                    clinicalAssets = clinicalAssets.OrderBy(s => s.PurchaseDate);
                    break;
                default:
                    clinicalAssets = clinicalAssets.OrderBy(s => s.ClinicalAssetID);
                    break;
            }
            int pageSize = 10;
            int pageNumber = (page ?? 1);
            return View(clinicalAssets.ToPagedList(pageNumber, pageSize));
        }
````

您是否尝试过普通的旧 SQL 查询? 您要求信任您的所有连接并且没有看到数据。 我建议 运行 直接在数据库上查询。

因为临床 PAT 中有空值 table。

需要左外连接来弥补这一点。


         var clinicalAssets = from s in db.ClinicalAssets
                                  join cp in db.ClinicalPATs on s.ClinicalAssetID equals cp.ClinicalAssetID into AP
                                  from subpat in AP.DefaultIfEmpty()


                                  select new ClinicalASSPATVM
                                  {
                                   ClinicalAssetID = s.ClinicalAssetID,
                                   ProductName = s.ProductName,
                                   InspectionDocumnets = subpat.InspectionDocumnets ?? String.Empty };