2013-01-07 127 views
1

我是使用LINQ的新手,我無法訪問此查詢的結果。目標是在別處使用結果的值。如何訪問LINQ結果

var orderFacts = new OrdersFactsController().getOrderFacts(base.ModuleId); 
var f = (from x in orderFacts 
     where x.Language == lang 
     select new 
       { 
        x.PRN, 
        x.ProdCode, 
        x.KeyCodes, 
        x.JobNumber, 
        x.OfferingCode, 
        x.Currency, x.ID, 
        x.OrderSourceCode 
       }); 

該查詢返回結果,因爲我可以在調試時看到它們,但我不知道如何使用結果。

我認爲這將是那麼容易,因爲是這樣的:

var prn = f.PRN 

但它似乎並不如此。

+1

您將返回一個匿名類型的IEnumerable 。你能舉一個你想在哪裏/如何使用它的例子嗎? –

+0

@JonB是正確的 - 「f」應該是一個類型的IEnumerable,而不是該類型的單個實例。 –

+1

另請注意,匿名類型專門用於在單一方法的範圍內使用。如果您想要公開外部查詢的結果,您需要創建一個命名類型,您可以創建一個集合/序列而不是使用匿名類型。哦,我會在該查詢中引入一些換行符,而不是將它們全部放在一行中。 – Servy

回答

6

f的類型不是您選擇的投影屬性的單個值。

代替f類型是IEnumerable<T>其中T是你的新創建的對象(你可以在Visual Studio超過VAR用鼠標懸停看到這一點)。如果你確信只有一個生成的對象,你可以在f使用SingleOrDefault()這樣的:

var obj = f.SingleOrDefault(); 

如果f可以包含多個對象,你可以在它們之間迭代與foreach聲明:

foreach(var obj in f) 
{ 
    var prn = obj.PRN; 
}