2014-07-26 73 views
2

我的類:使用類的方法,同時創造新的實例

public class AvailabilityDataWithoutAging 
{ 
    public string BranchPlant { get; set; } 
    public string Location { get; set; } 
    public string ItemCode { get; set; } 
    public string ItemDescription { get; set; } 
    public int PiecesPerPalletMaster { get; set; } 
    public int NumberOfLots { get; set; } 
    public int NumberOfPalletsConversion { get; set; } 
    public int AvailablePrimary { get; set; } 
    public int TempPrimary { get; set; } 
    public int BlankPrimary { get; set; } 
    public int HoldAutomaticPrimary { get; set; } 
    public int HoldSpecificPrimary { get; set; } 

    public void CalculatePrimaryFromConversion() 
    { 
     NumberOfPalletsConversion = AvailablePrimary/PiecesPerPalletMaster; 
    } 
} 

我想在這個使用方法CalculatePrimaryFromConversion

retValue = _data 
    .GroupBy(av => new {av.limcu, av.lilocn, av.imlitm}) 
    .Select(av => new AvailabilityDataWithoutAging 
    { 
     BranchPlant = av.Key.limcu, 
     Location = av.Key.lilocn, 
     ItemCode = av.Key.imlitm, 
     ItemDescription = av.Max(s => s.imdsc), 
     PiecesPerPalletMaster = Convert.ToInt32(_JDE8dal.GetF41002Conversion(av.Max(s=>s.liitm),"PL","EA")), 
     AvailablePrimary = av.Sum(s => s.lipqoh), 
     NumberOfLots = av.Count(s => s.lilotn.StartsWith("1")), 
     TempPrimary = av.Sum(s => s.lilotn=="TEMP" ? s.lipqoh : 0), 
     BlankPrimary = av.Sum(s => s.lilotn == "" ? s.lipqoh : 0), 
     HoldAutomaticPrimary = 0, 
     HoldSpecificPrimary = 0 
    }).ToList(); 

有沒有辦法做到這一點?

附加信息:

我不想只在選擇這樣做,這是一個例子。我希望能夠在實例化課程時隨時做到這一點。對不起,我很困惑

+0

如何創建和使用只讀屬性,如「NumberOfPalletsConversion」? –

回答

2

不,你不能在Select表達式中做到這一點。您需要遍歷結果列表並在每個項目上調用CalculaePrimaryFromConversion。

但是我會推薦另一種方法。

製作NumberOfPalletsConversion計算特性

public class AvailabilityDataWithoutAging 
{ 
    public string BranchPlant { get; set; } 
    public string Location { get; set; } 
    public string ItemCode { get; set; } 
    public string ItemDescription { get; set; } 
    public int PiecesPerPalletMaster { get; set; } 
    public int NumberOfLots { get; set; } 
    public int NumberOfPalletsConversion 
    { 
     get 
     { 
      return AvailablePrimary/PiecesPerPalletMaster; 
     } 
    } 
    public int AvailablePrimary { get; set; } 
    public int TempPrimary { get; set; } 
    public int BlankPrimary { get; set; } 
    public int HoldAutomaticPrimary { get; set; } 
    public int HoldSpecificPrimary { get; set; } 
} 

另一種方法是,當你進入所有的參數,除了NumberOfPalletsConversion並執行構造函數中的計算創建一個公共構造函數。

1
.Select(av => 
{ 
    var r = new AvailabilityDataWithoutAging 
    { 
     BranchPlant = av.Key.limcu, 
     Location = av.Key.lilocn, 
     ItemCode = av.Key.imlitm, 
     ItemDescription = av.Max(s => s.imdsc), 
     PiecesPerPalletMaster = Convert.ToInt32(_JDE8dal.GetF41002Conversion(av.Max(s=>s.liitm),"PL","EA")), 
     AvailablePrimary = av.Sum(s => s.lipqoh), 
     NumberOfLots = av.Count(s => s.lilotn.StartsWith("1")), 
     TempPrimary = av.Sum(s => s.lilotn=="TEMP" ? s.lipqoh : 0), 
     BlankPrimary = av.Sum(s => s.lilotn == "" ? s.lipqoh : 0), 
     HoldAutomaticPrimary = 0, 
     HoldSpecificPrimary = 0 
    }; 
    r.CalculatePrimaryFromConversion(); 
    return r; 
}) 
+1

雖然這是OP方法的可行替代方案,但它真的能回答這個問題嗎?我認爲OP想要在初始化中調用該方法。 –

+0

@DavidFrye爲什麼不呢?他問如何在「選擇」操作中使用該方法。這是如何做到這一點。 –

+0

看我的編輯。我想這需要OP的澄清。 –

相關問題