声明Linq变量

时间:2014-05-22 15:35:07

标签: c#

您好我正在尝试声明一个linq变量但不确定正确的语法。 要声明正常变量,可以编写

int x = 5
string y = "apply";

但你怎么声明一个linq变量?

____ query = from z in Interactions select z;

不使用var,抱歉。

4 个答案:

答案 0 :(得分:3)

您可以使用var关键字:

var interactions = from z in Interactions
                   select z;

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

IEnumerable<Interaction> interactions = from z in Interactions
                                        select z;

两者在功能上都是等价的。这取决于你是否知道类型(如果选择匿名类型则不能使用该类型)以及它是否显而易见。如果不是我会一直显示类型,只是因为它更具可读性和可维护性。

答案 1 :(得分:2)

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

var query = from z in Interactions 
            select z;

如果您不想使用var

IEnumerable<T> query = from z in Interactions 
                       select z;

其中TInteractions中的元素类型。

答案 2 :(得分:0)

如果InteractionsIQueryable<T>,您必须将变量定义为IQueryable<T>

IQueryable<Interaction> interactions = from z in Interactions
                                       select z;

如果不这样做,在另一个LINQ查询中使用interactions会强制将其转换为LINQ to Objects查询。当您执行最终查询时,这可能是一个严重的问题,例如使用ORM:不是向数据库创建单个SQL语句,而是将中间结果加载到内存中,然后通过最终查询进行修改。

如果您知道它是IEnumerable,您可以写

IEnumerable<Interaction> interactions = from z in Interactions
                                       select z;

请注意,如果您返回匿名类型,或者Interactions包含匿名类型,则无法明确指定类型。

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

答案 3 :(得分:0)

Linq始终返回要枚举的对象类型的对象集合。如果您只想要一个结果并且您的查询得到一个结果,您可以执行类似

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

这样做就可以定义TypeOfObject result = null;随时随地填写。