LINQ to Entities - 左连接不拉数据

问题描述 投票:0回答:2

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

我有一个在clinicalPAT表中的结果与ClinicalAsset表匹配,但只显示在MVC视图中,而不是显示在ClinicalAsset表中的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));
        }
````
c# entity-framework-6 linq-to-entities
2个回答
0
投票

你尝试过一个普通的旧SQL查询吗?您要求信任所有联接而不查看数据。我建议直接在DB上运行查询。


0
投票

因为clinicalPAT表中有空值。

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


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

© www.soinside.com 2019 - 2024. All rights reserved.