【问题标题】:variable of type referenced from scope, but it is not defined从范围引用的类型变量,但未定义
【发布时间】:2020-02-11 03:37:26
【问题描述】:

我是一个新手 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>();

错误变量'p'类型从范围引用,但它没有定义

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

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    您不能通过使用 语法来使用 进行投影。 不是 Linq 提供者,它是一个具有自己语义的独特 API。您必须使用 QueryOver syntax,如 Stack Overflow 上的许多答案所示(例如 here)。

    简而言之, 中的 lambda 主要用于识别每个 lambda 仅一个实体属性。 (除了Where 条件更通用一点,但仅适用于simple expressions。) Lambda 不用于也不支持在单个 lambda 中表达精细投影,就像 Linq 一样。您必须将其分解为与使用的属性一样多的 lambda。然后使用结果转换器将其转换为您的 DTO。

    或者,使用:

    using System.Linq;
    using NHibernate.Linq; // This using is mandatory with older NHibernate, not with newer NH
    
    // ...
    
    var modelDetailEngine = session.Query<CarSpecification>()
        .Where(cs => ...)
        .Select(cs => new ModelDetailEngineDto
        {
            // ...
        })
        .SingleOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2015-10-08
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多