C# 如何访问LINQ结果
我不熟悉使用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,
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()
(取决于您想要的行为)来获取实际对象。