【问题标题】:LINQ to Entities - Left join not pulling dataLINQ to Entities - 左连接不提取数据
【发布时间】:2019-03-28 22:40:52
【问题描述】:

我的表 ClinicalAsset 表不会显示所有结果 + 与 ClinicalAssetID 匹配的临床PAT 表中的任何匹配结果。

我有一个在 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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      因为临床PAT 表中有空值。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-15
        相关资源
        最近更新 更多