显式变量声明

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.Insx.F)永远改变。所以在运行时执行之前你不会知道这不起作用。