显式变量声明
Explicit variable declaration
我有一个隐式定义为 var
的局部变量,并且正在填充通过 entity framework 从数据库检索的对象。当我将鼠标悬停在变量上时,我会得到如下图所示的详细信息。
如何在不使用 var 的情况下显式定义变量,例如
IQuerable<{Inpection Ins, Field F}> tempInspInner = getInspections();
而不是:
var tempInspInner = getInspections();
更新
getInspections() 具有以下代码:
return _dbcontext.Inspection
.Join(_dbcontext.Field,
ins => ins.FieldId,
f => f.FieldId,
(ins, f) => new { Ins = ins, F = f }).Where(*hidden*);
getInspections
returns 一个匿名类型(meh 叹气),命名元组不会有帮助,但是你可以将它投影到 class
public class SomeObject
{
public Inpection Ins {get;set;}
public Field F {get;set;}
}
IQueryable<SomeObject> = getInspections.Select(x => new SomeObject { Ins = x.Ins, F = x.F });
说到这里,你可能 return 强类型 IQueryable
无论如何
正如其他人所说,理想的选择是 getInspections()
return 强类型集合。
作为替代方案,您应该能够使用显式类型(使用 named tuples)定义变量,如下所示:
IEnumerable<(Inspection Ins, Field F)> test = getInspections()
.AsEnumerable()
.Cast<dynamic>()
.Select(x => (Ins: (Inspection)x.Ins, F: (Field)x.F));
这种方法的一个缺点是,由于结果被转换为 dynamic
,编译器不知道是否使用了源属性(x.Ins
和 x.F
)永远改变。所以在运行时执行之前你不会知道这不起作用。
我有一个隐式定义为 var
的局部变量,并且正在填充通过 entity framework 从数据库检索的对象。当我将鼠标悬停在变量上时,我会得到如下图所示的详细信息。
如何在不使用 var 的情况下显式定义变量,例如
IQuerable<{Inpection Ins, Field F}> tempInspInner = getInspections();
而不是:
var tempInspInner = getInspections();
更新
getInspections() 具有以下代码:
return _dbcontext.Inspection
.Join(_dbcontext.Field,
ins => ins.FieldId,
f => f.FieldId,
(ins, f) => new { Ins = ins, F = f }).Where(*hidden*);
getInspections
returns 一个匿名类型(meh 叹气),命名元组不会有帮助,但是你可以将它投影到 class
public class SomeObject
{
public Inpection Ins {get;set;}
public Field F {get;set;}
}
IQueryable<SomeObject> = getInspections.Select(x => new SomeObject { Ins = x.Ins, F = x.F });
说到这里,你可能 return 强类型 IQueryable
无论如何
正如其他人所说,理想的选择是 getInspections()
return 强类型集合。
作为替代方案,您应该能够使用显式类型(使用 named tuples)定义变量,如下所示:
IEnumerable<(Inspection Ins, Field F)> test = getInspections()
.AsEnumerable()
.Cast<dynamic>()
.Select(x => (Ins: (Inspection)x.Ins, F: (Field)x.F));
这种方法的一个缺点是,由于结果被转换为 dynamic
,编译器不知道是否使用了源属性(x.Ins
和 x.F
)永远改变。所以在运行时执行之前你不会知道这不起作用。