2011-10-11 37 views
1

我想寫一個方法,生成多個佣金單。這是一個大學,在一個名爲「註冊」的課程中,客戶將與導師一起報名。通過這種方法,我試圖積累導師客戶的月費乘以他們的佣金百分比,因爲導師在他們提供的課程上賺取一定佣金。這裏是我的代碼如下:數據庫計算 - MVC 3和CodeFirst

public ActionResult CreateBulkCommissions() 
{ 
var month = DateTime.Now.ToString("MMMM"); 

var enrolments = db.Enrollments.ToList(); 

var newCommissions = from enrolment in enrolments 
        select new TutorCommission() 
        { 
         CommissionAmount = enrolment.MonthlyFee, 
         CommissionMonth = month, // string constant 
         CommissionStatus = "Unpaid", 
         Tutor = enrolment.Tutor 
        }; 
foreach (var newCommission in newCommissions) 
{ 
    List<TutorCommission> TutorComs = newCommissions.GroupBy(g => g.Tutor).Select(s => new TutorCommission 
    { 
     CommissionAmount = s.Sum(u => u.CommissionAmount) * s.Key.TutorCommissionPercentage, 
     TutorNoID = s.Key.TutorNoID 

    }).ToList(); 

    db.TutorCommission.Add(newCommission); 
    db.SaveChanges(); 
} 

return RedirectToAction("Index"); 
} 

的問題是,爲每個單獨招生創建TutorCommission條目,而不是與總佣金量爲每導師一個條目(月)。即阿什利有3個客戶,因此有3個註冊,目前正在爲他創建3個TutorCommission條目。我想爲一個條目添加註冊金額。此外,這筆金額並未乘以佣金百分比,因此只需存入全額註冊月費。相關類:

public class Enrollment 
{ 
    [Key] 
    [Display(Name = "Enrollment ID Number")] 
    public long EnrollmentIDNumber { get; set; } 
    [Display(Name = "Client ID Number")] 
    public long ClientNumberID { get; set; } 
    [Display(Name = "Tutor ID Number")] 
    public long TutorNoID { get; set; } 
    [Display(Name = "Course Name")] 
    public string CourseName { get; set; } 
    [Display(Name = "Lesson Time")] 
    public string LessonTime { get; set; } 
    [Display(Name = "Lesson Day")] 
    public string LessonDay { get; set; } 
    [Display(Name = "Lesson Location")] 
    public string LessonLocation { get; set; } 
    [Display(Name = "Lesson Type")] 
    public string LessonType { get; set; } 
    [Display(Name = "Lesson Level")] 
    public string LessonLevel { get; set; } 
    [Display(Name = "Monthly Fee")] 
    public long MonthlyFee { get; set; } 

    public virtual Client Client { get; set; } 
    public virtual Tutor Tutor { get; set; } 

} 

public class TutorCommission 
{ 
    [Key] 
    [Display(Name = "Commission ID")] 
    public long CommissionID { get; set; } 
    [Display(Name = "Commission Month")] 
    public string CommissionMonth {get; set;} 
    [Display(Name = "Commission Amount")] 
    public double CommissionAmount { get; set; } 
    [Display(Name = "Commission Status")] 
    public string CommissionStatus { get; set; } 
    [Display(Name = "Tutor ID Number")] 
    public long TutorNoID { get; set; } 

    public virtual Tutor Tutor { get; set; } 
    public virtual ICollection<CommissionPayments> CommissionPayments { get; set; } 

} 

public class Tutor 
{ 
    [Key] 
    [Display(Name = "Tutor ID Number")] 
    public long TutorNoID { get; set; } 
    [Required] 
    [StringLength(50, ErrorMessage="First name must be less than 50 characters")] 
    [Display(Name = "First Name")] 
    public string TutorFirstName { get; set; } 
    [StringLength(50, ErrorMessage = "Last name must be less than 50 characters")] 
    [Display(Name = "Last Name")] 
    public string TutorLastName { get; set; } 
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Birth Date")] 
    public DateTime? TutorBirthDate { get; set; } 
    [Display(Name = "Cellphone Number")] 
    public string TutorCellphoneNumber { get; set; } 
    [Display(Name = "Home Number")] 
    public string TutorHomeNumber { get; set; } 
    [RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$", ErrorMessage = "Not a valid email address")] 
    [Display(Name = "Email Address")] 
    public string TutorEmailAddress { get; set; } 
    [Display(Name = "Street Address")] 
    public string TutorStreetAddress { get; set; } 
    [Display(Name = "Suburb")] 
    public string TutorSuburb { get; set; } 
    [Display(Name = "City")] 
    public string TutorCity { get; set; } 
    [Display(Name = "Postal Code")] 
    public string TutorPostalCode { get; set; } 
    [Display(Name="Full Name")] 
    public string FullName 
    { 
     get 
     { 
      return TutorFirstName + " " + TutorLastName; 
     } 
    } 
    [Display(Name="Commission Percentage")] 
    [Required] 
    public double TutorCommissionPercentage { get; set; } 

    public virtual ICollection<Enrollment> Enrollments { get; set; } 
    public virtual ICollection<TutorCommission> TutorCommissions { get; set; } 

} 

感謝, 艾米

+0

嗨艾米...你的問題似乎是與Linq,而不是MVC或EF ...你可能會得到更多的幫助,如果你重新說明這些問題。 –

回答

0

您可以嘗試移動分組邏輯foreach循環之外,則分組名單上的迭代。因此,而不是

foreach (var newCommission in newCommissions) 
{ 
    List<TutorCommission> TutorComs = newCommissions.GroupBy(g => g.Tutor).Select(s => new TutorCommission 
    { 
     CommissionAmount = s.Sum(u => u.CommissionAmount) * s.Key.TutorCommissionPercentage, 
     TutorNoID = s.Key.TutorNoID 

    }).ToList(); 

    db.TutorCommission.Add(newCommission); 
    db.SaveChanges(); 
} 

嘗試

List<TutorCommission> TutorComs = newCommissions.GroupBy(g => g.Tutor).Select(s => new TutorCommission 
    { 
     CommissionAmount = s.Sum(u => u.CommissionAmount) * s.Key.TutorCommissionPercentage, 
     TutorNoID = s.Key.TutorNoID 

    }).ToList(); 

foreach (var tutorCom in TutorComs) 
{  
    db.TutorCommission.Add(tutorCom); 
    db.SaveChanges(); 
} 

看看是否能更接近理想的結果。