2013-06-27 28 views
1

我寫了點號的查詢工作,它完美的作品:Linq查詢僅寫點符號

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

然後我不得不擴大它的一些連接,因爲我不點好符號,我在查詢語法中做到了。我在Person對象上發生了一個錯誤「Can not find a implementation of the query pattern」。我剪了所有的連接和得到它下來的作品上述查詢的查詢語法版本:

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

     return (query).ToList(); 
    } 

然而,上述查詢仍然得到同樣的錯誤。據我所知,他們是相同的查詢。我的研究顯示通常的原因是沒有實現IEnumerable,但是這些查詢在同一個類'Repository.cs'中,因此它們共享相同的使用語句。那麼,一個人如何工作,另一個人不工作?

回答

6

我想應該是db.Person它實現了IQueryable

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

     return (query).ToList(); 
} 
+0

哦扣,我需要更多的咖啡。謝謝。 – BattlFrog

+0

只是有點忽略讓人頭痛。乾杯! – mipe34

0

嚴格來說,您的查詢與「虛線」版本不一樣。您的原稿已訂購。所以,除了你沒有正確地訪問Person表中的主要問題,您的查詢應該是更多這樣的:

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

    return query.ToList(); 
} 
+0

他所做的一點是,他取消了排序,它仍然拋出一個例外;即使是「選擇」也沒有正確執行,所以他甚至沒有得到結果,而不是讓他們錯誤的順序。 – Servy

+0

對,爲了糾正編譯器錯誤,他必須正確訪問'Person'表。不過,我還談到了這兩個問題並不等同,他可能忽略了這一點。 –

+0

看起來他有這樣的代碼,當它不起作用時,他刪除了'orderby'行來查看* that *是否可行,並打算在解決潛在問題後再添加它。 – Servy