簡體   English   中英

如何從不同的表分配變量?

[英]How to assign variable from different tables?

我有一個資產制造商和型號表的列表。 我需要使用 AssetMakeString 分配 Asset Make。 目前我有:

    public class FuelLightTruckDataSource
    {
        public Model.Asset Asset { get; set; }
        public Employee Employee { get; set; }
        public FuelProductClass ProductClass { get; set; }
        public FuelVendor Vendor { get; set; }
        public FuelFillSource FillSource { get; set; }
        public AssetModel Model { get; set; }
        public AssetMake Make { get; set; }
        public string Source { get; set; }
        public string City { get; set; }
        public decimal Volume { get; set; }
        public decimal? Distance { get; set; }
        public decimal? Odomoter { get; set; }
        public decimal? DistanceVolume { get; set; }
        public float? ConsumptionRate { get; set; }
        public DateTime? Date { get; set; }
        public decimal? ConsumptionCalculated { get; set; }
        public decimal? DistanceCalculated { get; set; }

    public FuelLightTruckDataSource() { }

    public static List<FuelLightTruckDataSource> Get(DateTime from, DateTime to)
    {
        List<FuelLightTruckDataSource> data = new List<FuelLightTruckDataSource>();

        using (SystemContext ctx = new SystemContext())
        {

            List<FuelLightTruckDataSource> dataTransactions
                = ctx.FuelTransaction
                    .Where(tx => DbFunctions.TruncateTime(tx.DateTime) >= from.Date && DbFunctions.TruncateTime(tx.DateTime) <= to.Date
                        //&& tx.AssetFilled.AssignedToEmployee.Manager
                        && tx.AssetFilled.AssignedToEmployee != null
                        //&
                        && tx.AssetFilled.AssetType.Code == "L"
                        && (tx.FuelProductType.FuelProductClass.Code == "GAS" || tx.FuelProductType.FuelProductClass.Code == "DSL"))
                    .GroupBy(tx => new { tx.AssetFilled, tx.DateTime, tx.FuelProductType.FuelProductClass, tx.FuelCard.FuelVendor, tx.City, tx.Volume, tx.Odometer}) //Added tx.volume to have individual transactions
                    .Select(g => new FuelLightTruckDataSource()
                    {
                        Asset = g.FirstOrDefault().AssetFilled,
                        Model = g.FirstOrDefault().AssetFilled.AssetModel,
                        Make = g.FirstOrDefault().AssetFilled.AssetModel.AssetMakeString,
                        Employee = g.FirstOrDefault().AssetFilled.AssignedToEmployee,
                        ProductClass = g.FirstOrDefault().FuelProductType.FuelProductClass,
                        Vendor = g.FirstOrDefault().FuelCard.FuelVendor,
                        FillSource = FuelFillSource.Transaction,
                        Source = "Fuel Station",
                        City = g.FirstOrDefault().City.ToUpper(),
                        Volume = g.FirstOrDefault().Volume,
                        Distance = g.FirstOrDefault().Odometer,
                        Date = g.FirstOrDefault().DateTime


                    })
                   // .OrderBy(tx => tx.Date)
                    .ToList();

我的 AssetModel 類如下所示:

{
    public class AssetModel
    {
        public int Id { get; set; }
        [Required]
        [MaxLength(100)]
        [Index("IX_AssetModel", 2, IsUnique = true)]
        public string Name { get; set; }
        [MaxLength(10)]
        [Index("IX_AssetModel", 3, IsUnique = true)]
        public string Year { get; set; }
        public string Description { get; set; }

        [Index("IX_AssetModel", 1, IsUnique = true)]
        public int? AssetMakeId { get; set; }

        public virtual AssetMake AssetMake { get; set; }
        public virtual List<Asset> Assets { get; set; }

    // **** Custom Properties ****

    public string AssetMakeName { get { return AssetMake.Name; } }
    public string AssetMakeString { get { return AssetMake.Name + " " + Name + (Year == null ? "" : " (" + Year + ")"); } }
}

}

為什么我收到“錯誤:無法將類型‘字符串’隱式轉換為‘PSI.ManagementSystem.Model.AssetMake’”?

FuelLightTruckDataSource.Make聲明如下:

public AssetMake Make { get; set; }

Make的類型是AssetMake 您不能為其分配字符串。 您必須為其分配AssetMake

相反,您在此處為其分配一個字符串,編譯器不會接受它,因為它無法將字符串隱式轉換為AssetMake

Make = g.FirstOrDefault().AssetFilled.AssetModel.AssetMakeString

AssetMakeString是一個字符串。 它是這樣聲明的:

public string AssetMakeString { get { 
    return AssetMake.Name + " " + Name 
           + (Year == null ? "" : " (" + Year + ")"); } }

所以你不能使用該字符串來初始化FuelLightTruckDataSource.Make 與其將您從數據庫中獲取的資產 make 轉換為字符串,然后將其分配給您無法將其分配給的內容,您想要做的只是分配資產 make 本身。

您認為您可以找到AssetModel類型的AssetMake嗎? 如果您閱讀AssetModel的類定義,您可能會找到一個。 如果你能找到一個,那可能是你想要使用的屬性而不是AssetMakeString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM