2013-02-18 74 views
0

我很新的C#。請幫助我。創建自定義鏈接類

class BasicPay 
    { 
     public int employee_personal_id { get; set; } 
     public int grade_id { get; set; } 
     public int position_id { get; set; } 
     public Int32 base_pay { get; set; } 
     public Int32 housing { get; set; } 

    private static void getEmployeeForEmpFinance(int empPersionalinfoID) 
     { 

      var context = new SSPModel.sspEntities(); 
      var query = from c in context.Employee_Financial 
         join d in context.Employee_Employ on 
         c.Employee_Personal_InfoEmp_id equals d.Employee_Personal_InfoEmp_id 
         where c.Employee_Personal_InfoEmp_id == empPersionalinfoID 
         select new { c.ID, c.Employee_Personal_InfoEmp_id, c.Base_Pay, c.Housing_Allowance, d.Grade_Id }; 
      var y = query.SingleOrDefault(); 
      var basic = new List<BasicPay>(); 

      **basic.Add(y.Employee_Personal_InfoEmp_id,y.Grade_Id);** // THIS IS WHAT I DO NOT UNDERSTAND 

     } 

} 

評論線是我沒有得到。我是由自己的BasicPay類創建的。現在我該怎樣添加我的結果到這一點?請幫助我。我迫切需要!

EDITED ----- 所以我使用了下面的人的建議,它的工作,我試圖改善它..下面是我的新代碼。

private static BasicPay getEmployeeForEmpFinance(int empPersionalinfoID) 
{ 

    var context = new SSPModel.sspEntities(); 
    var query = from c in context.Employee_Financial 
       join d in context.Employee_Employ on 
       c.Employee_Personal_InfoEmp_id equals d.Employee_Personal_InfoEmp_id 
       where c.Employee_Personal_InfoEmp_id == empPersionalinfoID 
       select new BasicPay 
       { 
        employee_personal_id = c.Employee_Personal_InfoEmp_id, 
        grade_id = d.Grade_Id, 
        base_pay = c.Base_Pay, 
        housing = c.Housing_Allowance 
       }; 
    var y = query.SingleOrDefault(); 

    return y; 
} 

公共靜態無效employeeEmploy(INT payperiodID){

  var context = new SSPModel.sspEntities(); 
      var query = from c in context.Payroll_Batch 
         where c.PayperiodID == payperiodID 
         select c.Payroll_GroupID; 
      int y = query.SingleOrDefault(); 

      Debug.WriteLine("group id: " + y); 

      var query2 = from i in context.Employee_Employ 
         where (i.Payroll_Group == y && i.Grade_Id != null) 
         select new { i.ID,i.Employee_Personal_InfoEmp_id, i.Date_of_Appointment, i.Date_of_Employment, i.Grade_Id, i.Substantive_designation }; 
      var empEmploy = query2.ToList(); 

      var basics = new List<BasicPay>(); 

      foreach (var x in empEmploy) 
      { 
       basics.Add(getEmployeeForEmpFinance(x.Employee_Personal_InfoEmp_id)); 


      } 
      for (int c=0; c < basics.Count(); c++) 
      { 
       Debug.WriteLine(basics.ElementAt(c).employee_personal_id); 
      } 

} 

而這樣做我得到以下錯誤在最後。

對象引用不設置爲一個對象的一個​​實例。

描述:在執行 當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.NullReferenceException:對象不 設置爲一個對象的一個​​實例。

注意 - 它不會打印出一組正確的data..just在年底收到此錯誤。任何原因?

+0

我簡單的建議是隔離在其他一些類的屬性,並添加到您的列表 – Smaug 2013-02-18 13:01:12

+0

對不起,它是刪除..奇怪。我創建了我自己的基本工資類,我試圖把它列入清單 2013-02-18 13:01:52

+0

然後看到我的答案。它會幫助你。因爲你不能直接添加值,因爲你在列表中提到了「BasicPay」類。所以您只能在List中添加「BasicPay」類型。這是我添加一個新的「BasicPay」類的目的,並分配了值,然後添加到IList – Smaug 2013-02-18 13:06:13

回答

2

您不能插入一個匿名對象到列表 簡單地做一些事情,像這樣:

var query = from c in context.Employee_Financial 
         join d in context.Employee_Employ on 
         c.Employee_Personal_InfoEmp_id equals d.Employee_Personal_InfoEmp_id 
         where c.Employee_Personal_InfoEmp_id == empPersionalinfoID 
         select 
     new BasicPay 
     { 
        position_id = blah.ID, 
        housing = blah.Housing 

     }; 
//I'm making stuff up as the property because I don't understand the stuff you are filling. 
//Fill as appropriate 

再經過:

var y = query.SingleOrDefault(); 
var basics = new List<BasicPay>(); 
basics.Add(y); 

你不能這樣做y.IDy.SomeProperty因爲y是一個object ..一個object不具備這些屬性。因此,一些建議的答案不會工作:(

+0

謝謝..我認爲這項工作..偉大的幫助! – 2013-02-18 13:05:52

+0

可能聽起來像一個愚蠢的問題,但我現在必須列出..我如何打印出來看看它是否正確。提前致謝。 – 2013-02-18 13:29:50

+0

在BasicPay可以覆蓋的toString,所以你可以有 的foreach(VAR b在基礎){Console.WriteLine (b.ToString()); } – 2013-02-18 13:39:01

2

如何

basic.Add(new BasicPay { employee_personal_id = y.Employee_Personal_InfoEmp_id, grade_id = y.Grade_Id}); 
0

您正在創建的BasicPay列表,所以你應該把這個類型的實例到列表:

basic.Add(new BasicPay {employee_personal_id = y.Employee_Personal_InfoEmp_id, grade_id = y.Grade_Id}); 
+0

班級名稱爲BasicPay – Dutts 2013-02-18 13:05:56

+0

我已更正。謝謝。 – 2013-02-18 13:07:45

0

我想下面的解決方案將幫助您

BasicPay objPay = new BasicPay(); 
    objPay.employee_personal_id = y.Employee_Personal_InfoEmp_id; 
    objPay.grade_id    = y.Grade_Id; 

    basic.Add (objPay); 

0

要麼你缺少構造函數,或者你必須從默認的初始化:

public BasicPay(int empId, int gradeId) 
{ 
    --> here initialization 
} 

或者你設置的所有屬性的公共你可以使用默認的構造函數:

basic.Add(new BasicPay 
{ 
    employee_personal_id=y.Employee_Personal_InfoEmp_id, 
    grade_id = y.Grade_Id 
}); 
相關問題