public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int TeacherId { get; set; }
public virtual Teacher Teacher { get; set; }
}
public class Nim
{
public int Id{ get; set; }
public int NIM { get; set; }
public bool Valid { get; set; }
}
public class Teacher
{
public int Id { get; set; }
public string Name { get; set; }
public int NimId { get; set; } //this is fk
public virtual ICollection<Student> Students { get; set; }
}
Я хочу получить список NIM на Учителя, найдя с именем учителя, вот мой первый код, я могу сделать это, используя этот код, и производительность хорошая и быстрая
string keyword = "John";
using (TestingEntities1 db = new TestingEntities1())
{
var models = db.Teachers.Where(a => a.Name.Equals(keyword)).
GroupBy(x => x.NimId).Select(i => new { i.FirstOrDefault().NimId });
}
Затем я добавляю функцию, которая также позволяет получить список NIM от дочернего имени, которое называется Student. Я пытался использовать ключевое слово «Any», но производительность очень медленно загружает результат (у меня много данных в моей базе данных)
ниже мой код, я использовал "Любой"
string keyword = "John";
using (TestingEntities1 db = new TestingEntities1())
{
var models = db.Teachers.Where(a => a.Name.Equals(keyword) || a.Students.Any(x=>x.Name.Equals(keyword))).
GroupBy(x => x.NimId).Select(i => new { i.FirstOrDefault().NimId });
}
Можете ли вы дать мне правильный способ сделать это, а также хороший результат скорости загрузки с моим делом?