簡體   English   中英

ASP.NET MVC5-(實體框架)LINQ查詢聯接&如果更改,則僅返回1個結果,而不返回其他結果

[英]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將兩個模型連接在一起,並將其分配到名為SchoolVMViewModel中

我通過Schools加入了與Schools Contacts school.ID equals contact.School_ID

因此,對於Schools的記錄id = 1 ,它確實返回了我想要的結果。

但是,當我重新查詢id = 2id = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM