[英]ASP.NET MVC5 - (Entity Framework) LINQ Query Join & Where returning only 1 result but not other result if changed
好的。 我將盡我所能描述我要完成的工作。 我找不到任何構成我問題的堆棧溢出問題。
ASP.NET MVC5-從DBContext模型到ViewModel的(實體框架)LINQ查詢
我將ASP.NET MVC5與Entity Framework一起使用,並且已將DBContext固定在Schools
and Contacts
類模型中 。 我正在嘗試使用LINQ Query將兩個模型連接在一起,並將其分配到名為SchoolVM
的ViewModel中 。
我通過Schools
加入了與Schools
Contacts
school.ID equals contact.School_ID
因此,對於Schools
的記錄id = 1
,它確實返回了我想要的結果。
但是,當我重新查詢id = 2
或id = 3
等等時,它不返回任何內容,計數為零。
只是讓大家知道,id 2,3,4等等的記錄確實存在。
有人可以幫我嗎? 讓我知道您是否需要更多代碼信息。
這是下方的“控制器操作方法”。
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
//**LINQ Query joining two Models and putting into a ViewModel.
//**LINQ Query that seems to return the record ID == 1, but not
//**existing record ID == 2 or 3 or so on and so forth.
var schoolDetails = (from school in db.Schools
join contact in db.Contacts on school.ID equals contact.School_ID
where school.ID == id
select new { school, contact }).ToList();
//**This is the ViewModel that I am trying to assign the joined LINQ query into.
SchoolVM schoolVM = new SchoolVM();
foreach (var value in schoolDetails)
{
//**Schools Model Information
schoolVM.ID = value.school.ID;
schoolVM.SchoolName = value.school.SchoolName;
schoolVM.Address = value.school.Address;
schoolVM.City = value.school.City;
schoolVM.State = value.school.State;
schoolVM.Zip = value.school.Zip;
schoolVM.MainPhone = String.IsNullOrEmpty(value.school.MainPhone) ? "" : String.Format("{0:(###) ###-####}", double.Parse(value.school.MainPhone));
schoolVM.Website = value.school.Website;
schoolVM.NumberOfStudents = value.school.NumberOfStudents;
schoolVM.SchoolOrDistrict = value.school.SchoolOrDistrict;
schoolVM.CountyID = value.school.CountyID;
//**Contacts Model Information
schoolVM.ContactFirstName = value.contact.ContactFirstName;
schoolVM.ContactLastName = value.contact.ContactLastName;
schoolVM.ContactTitle = value.contact.ContactTitle;
schoolVM.ContactPhone = value.contact.ContactPhone;
schoolVM.ContactEmail = value.contact.ContactEmail;
schoolVM.PrimaryOrSecondary = value.contact.PrimaryOrSecondary;
schoolVM.Coordinator = value.contact.Coordinator;
}
//**This is where LINQ is returning COUNT = 0 for ID = 2, 3, 4 and so forth.
if (schoolDetails == null || schoolDetails.Count == 0)
{
return HttpNotFound();
}
return View(schoolVM);
}
更新:
感謝Daniel Lorenz的投入。 非常簡單的解決方案。 我只是將LINQ查詢從INNER JOIN或JOIN更改為LEFT JOIN。
原版的:
var schoolDetails = (from school in db.Schools
join contact in db.Contacts on school.ID equals contact.School_ID
where school.ID == id
select new { school, contact }).ToList();
解:
//**Changed alias name around a bit to accommodate the rest of the code.
var schoolDetails = (from school in db.Schools
join contacts in db.Contacts on school.ID equals contacts.School_ID into schoolvm
from contact in schoolvm.DefaultIfEmpty()
where school.ID == id
select new { school, contact }).ToList();
您是內在聯系的人。 因此,如果沒有與ID為2、3的學校的聯系,您將不會獲得這些記錄。 您需要執行左連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.