LINQ查询带变量

时间:2017-12-21 17:58:07

标签: c# asp.net asp.net-mvc linq

大家好我正在尝试使用以下代码在.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是包含我需要比较的值的变量。

我该怎么做?

3 个答案:

答案 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)

您的cursoIEnumerable<>(因为这是从查询中返回的内容),无论您知道它只有0或1个元素。

您可以执行类似

的操作
var cursoId = curso.FirstOrDefault() 

然后使用cursoId代替。

注意:你应该测试并处理default,当没有返回任何元素时,避免进入下一个查询,做其他事情我猜。

建议,只需将光标悬停在var变量上即可查看其实际类型。