【问题标题】:Cannot convert method group 'ToList' to non-delegate type无法将方法组“ToList”转换为非委托类型
【发布时间】:2011-10-11 17:54:09
【问题描述】:

我正在尝试编写一种生成多张发票的方法。这是针对一所大学的,在该大学中,客户在名为 Enrollments 的课程中​​与导师一起注册。使用这种方法,我试图累积导师客户的月费乘以他们的佣金百分比,因为导师从他们提供的课程中赚取一定的佣金。这是我的代码:

    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 = new Tutor { TutorNoID = enrolment.Tutor.TutorNoID, TutorCommissionPercentage = enrolment.Tutor.TutorCommissionPercentage }
                             };
        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");
    }

在 ToList 行上,我收到将方法组 ToList 转换为非委托类型的错误。以下是我的相关模型类:

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; }

}

谢谢, 艾米

【问题讨论】:

    标签: c# asp.net-mvc-3 entity-framework-4


    【解决方案1】:

    您应该调用 ToList () 而不是 ToList。

    【讨论】:

    • 啊!总是那么简单,谢谢。不过,我现在收到一个新错误,一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。在哪里可以找到 EntityValidationErrors?
    • EntityValidationErrors 出现异常。在此处下载我的源代码并查看处理它们的一种方法。 completedevelopment.blogspot.com/2011/10/…
    • 谢谢。这样的异常通常有什么问题?
    【解决方案2】:

    ToList 是方法而不是属性。应该是 ToList()

    【讨论】:

      【解决方案3】:

      你的意思是:

          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();
      

      【讨论】:

      • 请注意 TutorCommission 构造函数后面的 ()。
      • TutorCommission 构造函数后不需要 ()。
      • 嗯,真的吗?我总是把它放进去,我想每天都会学到一些新东西。
      • 因为你使用的是对象初始化器,它会自动使用默认构造器,所以编译器隐含了 ()。当然,把它留在里面也没坏处。只是偏好问题。 :)
      • 是的,我绝对可以看到它是多余的。我认为我更喜欢保留它,因为我喜欢一致性。
      【解决方案4】:
      protected void Button3_Click(object sender, EventArgs e)
          {
              SqlDataReader dr = null;
              SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=shoping;User ID=sa;Password=yamini");
              con.Open();
              SqlCommand cmd = new SqlCommand("Select email from usertd where @email='" + TextBox1.Text + "' ", con);
              cmd.Parameters.AddWithValue("@email", TextBox1.Text);
              dr = cmd.ExecuteReader;
              if (dr != null && dr.HasRows)
              {
                  TextBox2.Text = "abc";
              }
              else
              {
                  TextBox2.Text = "hdc";
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多