私が達成しようとしていることを、自分の能力のうち最高のものについて説明します。私は私の質問をもたらすスタックオーバーフローの質問を見つけることができませんでした。ASP.NET MVC5 - (Entity Framework)LINQクエリ結合&変更された場合は1つのみの結果を返しますが、他の結果は返しません。
ASP.NETのMVC5 - (Entity Frameworkの)LINQクエリDBContextモデルからのViewModelに
私は、Entity Frameworkを使用してASP.NET MVC5を使用していると私はモデルSchools
クラスにDBContextをスキャフォールドしてきたし、 Contacts
。私はLINQクエリを使用して2つのモデルを一緒に結合し、ViewModelSchoolVM
という名前に割り当てようとしています。
私はSchools
のレコードid = 1
のために、それは私が望んでいた結果を返しませんので、school.ID equals contact.School_ID
を通じてSchools
でContacts
に参加しました。
しかし、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);
}
UPDATE:ダニエル・ローレンツの入力に
感謝。非常に簡単な解決策。 LINQクエリをINNER JOINまたはJOINからLEFT JOINに変更しました。
ORIGINAL:
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();
SOLUTION:
//**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();
Dang。私はそれを監督するとは信じられません。あなたの目を見ていただきありがとうございます。私はそれを私が得た解決策で更新します。 –
私たちすべてに起こります。 :) –