Linq查询仅在以点表示法编写时才有效

时间:2013-06-27 15:03:14

标签: c# asp.net-mvc-3 linq entity-framework

我用点符号写了一个查询,它完美无缺:

    public IEnumerable<Person> GetPeople()
    {
        return db.Person.OrderBy(m => m.LastName).ThenBy(m => m.FirstName).ToList();
    }

然后我不得不用一些连接扩展它,因为我用点表示法不是很好,我在查询语法中做了它。我在Person对象上遇到错误“无法找到查询模式的实现”。我删除了所有连接,并将其归结为上述查询的查询语法版本:

    public IEnumerable<Person> GetPeople()
    {
        var query = from p in Person
                    select p;

        return (query).ToList();
    }

但是,上面的查询仍然会出现相同的错误。据我所知,它们是同一个查询。我的研究表明,通常的原因是没有实现IEnumerable,但这些查询属于同一个类,'Repository.cs',因此它们共享相同的using语句。那么一个人如何工作而另一个不工作呢?

2 个答案:

答案 0 :(得分:6)

我认为应该是db.Person来实现IQueryable

public IEnumerable<Person> GetPeople()
{
        var query = from p in db.Person
                    select p;

        return (query).ToList();
}

答案 1 :(得分:0)

严格来说,您的查询与“点”版本不同。您的原件已订购。因此,除了您没有正确访问Person表的主要问题之外,您的查询应该更像这样:

public IEnumerable<Person> GetPeople()
{
    var query = from p in db.Person
                orderby p.LastName, p.FirstName
                select p;

    return query.ToList();
}