C# 声明Linq变量

C# 声明Linq变量,c#,C#,您好,我正在尝试声明一个linq变量,但不确定语法是否正确。 对于声明正态变量,您可以编写 int x = 5 string y = "apply"; IEnumerable<Interaction> interactions = from z in Interactions select z; 但是如何声明linq变量呢 ____ query = from z in Interactions sele

您好,我正在尝试声明一个linq变量,但不确定语法是否正确。 对于声明正态变量,您可以编写

int x = 5
string y = "apply";
IEnumerable<Interaction> interactions = from z in Interactions
                                       select z;
但是如何声明linq变量呢

____ query = from z in Interactions select z;

没有使用var,对不起

您必须至少从交互中选择
z

var query = from z in Interactions 
            select z;
如果您不想使用
var

IEnumerable<T> query = from z in Interactions 
                       select z;
IEnumerable query=来自交互中的z
选择z;
其中
T
交互中的元素类型

您可以使用关键字:

假设
交互
交互
的集合,您也可以使用具体类型:

IEnumerable<Interaction> interactions = from z in Interactions
                                        select z;
IEnumerable interactions=从交互中的z开始
选择z;

两者在功能上是等价的。这取决于您是否知道该类型(如果选择匿名类型,则无法使用该类型)以及该类型是否明显。如果不是,我将始终显示该类型,因为它更具可读性和可维护性。

如果
交互
是一个
IQueryable
,则必须将变量定义为
IQueryable

请注意,如果返回匿名类型,或者
交互
包含匿名类型,则不能显式指定该类型


这就是为什么通常最好将查询变量声明为
var
,而不是指定类型

Linq始终返回所枚举对象类型的对象集合。如果您只需要一个结果,而您的查询得到的是一个结果,那么您可以执行以下操作

TypeOfObject result = (select o from TypeOfObjectCollection where o.SomeFilter = "SomeValue" select o).FirstOrDefault();

通过这种方式,您可以定义TypeOfObject result=null;您可以在任何地方使用,并在以后填充。

为什么不使用
var
?为什么不使用var?显式指定类型将强制您破译最终变量的类型(IEnumerable、IQueryable),或者如果您使用匿名类型,甚至可能无法破译。事实上,将IQueryable强制转换为IEnumerable实际上会执行可能不是您想要的查询。您试图解决的真正问题是什么?变量必须在if语句外部声明,但必须在if语句中初始化。并在if语句之外访问。Var对我的情况帮助不大Var与Visual Basic 6中的Var不同。它不是一个变量类型,在显式声明该类型的基础上使用var没有性能损失。当程序编译时,它会确定var的类型并用类型替换var。但如果必须,您可以明确定义它,例如,List trucks=new List()//添加一些卡车卡车=(从卡车中的t开始,其中t.Make==车辆Make.Ford选择t);如果(truck!=null){//Make Ford的一辆卡车被找到。}@gunr217听起来他完全明白
var
是什么。如果他需要在初始化变量之前声明变量,那么他不能在这里使用
var
,因为
var
只能在同时初始化和声明变量时使用。
IEnumerable<Interaction> interactions = from z in Interactions
                                       select z;
TypeOfObject result = (select o from TypeOfObjectCollection where o.SomeFilter = "SomeValue" select o).FirstOrDefault();