【问题标题】:Linq query only works if written in dot notationLinq 查询仅在以点表示法编写时才有效
【发布时间】:2013-06-27 15:03:14
【问题描述】:

我用点符号写了一个查询,它运行良好:

    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 语句。那么如何一个工作而另一个不工作呢?

【问题讨论】:

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


    【解决方案1】:

    我想应该是db.Person,它实现了IQueryable

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

    【讨论】:

    • 哦,快点,我需要更多的咖啡。谢谢。
    • 稍有疏忽就让人头疼。干杯!
    【解决方案2】:

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

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

    【讨论】:

    • 他的意思是他删除了订单,但它仍然抛出异常;甚至Select 也没有正确执行,所以他甚至没有得到结果,而不是让它们按错误的顺序排列。
    • 对,要纠正编译器错误,他必须正确访问Person 表。然而,我还提到了他可能忽略的两个查询不等同的事实。
    • 看起来他有这样的代码,当它不起作用时,他删除了orderby 行以查看 that 是否可以工作,意图一旦他解决了根本问题,就把它加回来。
    • 也许,但随后他说“据我所知,它们是相同的查询”,并且显示的代码,嗯......看起来不是那样的。哦,好吧。
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多