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