从作用域引用的类型的变量,但未定义

Huy*_*ham 3 nhibernate

我是nhibernate的新手,我尝试像实体一样在Nhibernate中使用Select。这是查询

var modelDetailEngine = session.QueryOver<CarSpecification>(() => specificationAlias)
                    .Left.JoinAlias(() => specificationAlias.Car, () => carAlias)
                    .Left.JoinAlias(() => carAlias.Year, () => yearAlias)
                    .Left.JoinAlias(() => yearAlias.Model, () => modelAlias)
                    .Left.JoinAlias(() => modelAlias.Style, () => styleAlias)
                    .Left.JoinAlias(() => styleAlias.Manufacturer, () => manufactureAlias)
                    .Where(() => manufactureAlias.Id == manufactureId && modelAlias.Id == modelId && yearAlias.Id == yearId)
                    .Select(p => new ModelDetailEngineDto()
                    {
                        EngineName = p.Engine,
                        EngineType = p.Type_Engine,
                        CompressionRatio = p.Compresstion,
                        DrivingType = p.Driving_Type,
                        TranmissionType = p.Transmission_Type,
                        FuelType = p.Fuel_Type,
                        FuelEconomyCity = p.Fuel_Economy_City,
                        FuelEconomyHighway = p.Fuel_Economy_Highway,
                        Locking = p.Locking,
                        EngineValvetrain = p.Engine_Valvetrain,
                        ESS = p.ESS,
                        EBD = p.EBD,
                        RemoteVehicle = p.Remote_Vehice,
                        Tranmission = p.Transmission,
                        ExteriorLength = p.Exterior_Length,
                        ExteriorWidth = p.Exterior_Width,
                        ExteriorHeight = p.Exterior_Height,
                        HorsePower = p.Horsepower,
                        Torque = p.Torque,
                        DragCoeficient = p.Drag_Coeficient,
                        TimeSpeed = p.TimeSpeed,
                        Km = p.Km,
                        CurbWeight = p.Curb_Weight,
                        GVWR = p.GVWR
                    }).SingleOrDefault<ModelDetailEngineDto>();
Run Code Online (Sandbox Code Playgroud)

从作用域引用的类型的错误变量“ p”,但未定义

我不明白它有什么问题。请帮助我!

Fré*_*ric 6

您无法使用语法进行不是Linq提供程序,而是具有自己语义的独特API。您必须使用QueryOver语法,如有关Stack Overflow的许多答案所示(此处为示例)。

简而言之,中的lambda 通常用于识别每个lambda仅一个实体属性。(除了Where条件更通用之外,其他条件仅适用于简单表达式。)与Linq一样,不使用Lambda并支持在单个Lambda中表达复杂的投影。您必须使用与所用属性一样多的lambda分解它。然后使用结果转换器将其转换为DTO。

或者,使用

using System.Linq;
using NHibernate.Linq;

// ...

var modelDetailEngine = session.Query<CarSpecification>()
    .Where(cs => ...)
    .Select(cs => new ModelDetailEngineDto
    {
        // ...
    })
    .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)