2013-01-07 90 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; 
}