大家好我正在尝试使用以下代码在.NET MVC中使用C#中的LINQ进行查询:
public int Delete(int id)
{
using (DBEntities db = new DBEntities())
{
var student = db.Students.Find(id);
var curso = from t in db.Teachers
join i in db.Inscriptions on id equals i.StudentId
where t.Id == i.StudentId
select i.Id;
var atten = from a in db.Attendances
where a.InscriptionId == curso
}
}
我正在尝试将我正在进行的查询与已包含值的变量进行比较。
我想比较一下:where a.InscriptionId == curso
Curso是包含我需要比较的值的变量。
我该怎么做?
答案 0 :(得分:0)
你能否使用另一个连接并将它们作为对象返回?类似......
var student = db.Students.Find(id);
var CursoAndAtten = (from t in db.Teachers
join i in db.Inscriptions on i.id equals i.StudentId
join a in db.Attendances on a.InscriptionId equals
i.Id
where t.Id == i.StudentId
select new { curso = i.Id, atten = a}).ToList()// Or e.g FirstOrDefault() ;
答案 1 :(得分:0)
您的查询将返回类型IEnumerable<int>
而不是int。
尝试使用FirstOrDefault()
选择查询末尾的单个元素。
public int Delete(int id)
{
using (DBEntities db = new DBEntities())
{
var student = db.Students.Find(id);
var curso = from t in db.Teachers
join i in db.Inscriptions on id equals i.StudentId
where t.Id == i.StudentId
select i.Id;
var atten = from a in db.Attendances
where a.InscriptionId == curso.FirstOrDefault() //this line was modified
}
}
答案 2 :(得分:0)
您的curso
是IEnumerable<>
(因为这是从查询中返回的内容),无论您知道它只有0或1个元素。
您可以执行类似
的操作var cursoId = curso.FirstOrDefault()
然后使用cursoId
代替。
注意:你应该测试并处理default
,当没有返回任何元素时,避免进入下一个查询,做其他事情我猜。
建议,只需将光标悬停在var变量上即可查看其实际类型。