C# 如何访问LINQ结果

C# 如何访问LINQ结果,c#,linq,C#,Linq,我不熟悉使用LINQ,访问此查询的结果时遇到问题。目标是在其他地方使用结果的值 var orderFacts = new OrdersFactsController().getOrderFacts(base.ModuleId); var f = (from x in orderFacts where x.Language == lang select new { x.PRN,

我不熟悉使用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

但事实似乎并非如此

f的类型与您选择的投影属性不是一个单一的值

相反,
f
的类型是
IEnumerable
,其中
T
是您新创建的对象(您可以在Visual Studio中将鼠标悬停在var上看到这一点)。如果确定只有一个结果对象,则可以在
f
上使用
SingleOrDefault()
,如下所示:

var obj = f.SingleOrDefault();
如果
f
可能包含多个对象,则可以使用
foreach
语句对其进行迭代:

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

f
的类型不是具有所选投影特性的单个值

相反,
f
的类型是
IEnumerable
,其中
T
是您新创建的对象(您可以在Visual Studio中将鼠标悬停在var上看到这一点)。如果确定只有一个结果对象,则可以在
f
上使用
SingleOrDefault()
,如下所示:

var obj = f.SingleOrDefault();
如果
f
可能包含多个对象,则可以使用
foreach
语句对其进行迭代:

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

您正在返回一个匿名类型的
IEnumerable
。你能举个例子说明你想在哪里/如何使用它吗?@JonB是正确的-
f
应该是某个类型的IEnumerable,而不是该类型的单个实例。还要注意,匿名类型是专门为在单个方法的范围内使用而设计的。如果要在外部公开查询的结果,则需要创建一个命名类型,而不是使用匿名类型创建集合/序列。哦,我会在该查询中加入一些换行符,而不是将其全部放在一行中。@JonB var orderFacts是来自PetaPoco的Ienumerable返回,它包含db表中的所有行。linq查询是将结果精简为仅一个。结果值用于填充某些表单字段。@markholl因为您的LINQ查询也返回IEnumerable。与Wouter的回答一样,您需要调用
First()
FirstOrDefault()
Single()
,或
SingleOrDefault()
(取决于您想要的行为)来获取实际对象。您返回的是匿名类型的
IEnumerable
。你能举个例子说明你想在哪里/如何使用它吗?@JonB是正确的-
f
应该是某个类型的IEnumerable,而不是该类型的单个实例。还要注意,匿名类型是专门为在单个方法的范围内使用而设计的。如果要在外部公开查询的结果,则需要创建一个命名类型,而不是使用匿名类型创建集合/序列。哦,我会在该查询中加入一些换行符,而不是将其全部放在一行中。@JonB var orderFacts是来自PetaPoco的Ienumerable返回,它包含db表中的所有行。linq查询是将结果精简为仅一个。结果值用于填充某些表单字段。@markholl因为您的LINQ查询也返回IEnumerable。与Wouter的回答一样,您需要调用
First()
FirstOrDefault()
Single()
,或
SingleOrDefault()
(取决于您想要的行为)来获取实际对象。