0
  1. Emp クラスを作成しました

    class Emp
    {
        public Emp()
        {
        }
        public Emp(Int64 empId, string empName, double empSalary,int empDeptId)
        {
            this.EmpID = empId;
            this.EmpName = empName;
            this.EmpSalary = empSalary;
            this.EmpDeptId = empDeptId; 
        }
        public Int64 EmpID { get; set; }
        public string EmpName { get; set; }
        public double EmpSalary { get; set; }
        public Int32 EmpDeptId { get; set; }
    }
    
  2. Group byコマンドをEmpListに適用するだけで、returnステートメントでランタイム例外が発生しました

ConsoleApplication5.exe で、タイプ 'System.InvalidCastException' の未処理の例外が発生しました

追加情報:

タイプ 'WhereSelectEnumerableIterator 2[System.Linq.IGrouping2[System.Int32,ConsoleApplication5.Emp],<>f__AnonymousType0 3[System.Int32,System.Double,System.Double]]' to type 'System.Collections.Generic.IEnumerable1[ConsoleApplication5.EmpGroup]' のオブジェクトをキャストできません。

私が書いたコードも共有します。

public IEnumerable<EmpGroup> GroupByDeptId()
        {

            var numberGroups =from result in empList
                              group result by result.EmpDeptId into groupingData
                              select new 
                              {
                                  EmpDeptId = groupingData.Key,
                                  SalarySum = groupingData.Sum(p => p.EmpSalary),
                                  AverageSalary = groupingData.Average(p => p.EmpSalary) 
                              };

               return (IEnumerable<EmpGroup>)numberGroups;

        }

`3. また、グループ化データを処理する EmpGroup のクラスも作成しました。

class EmpGroup
    {
        public Int32 EmpDeptId { get; set; }

        public double SalarySum { get; set; }

        public double AverageSalary { get; set; }
    }
4

1 に答える 1

1

フィールドが同じであっても、匿名から型にキャストすることはできません。select新しい を作成するには、LINQ を編集する必要がありますEmpGroup

public IEnumerable<EmpGroup> GroupByDeptId()
        {

            var numberGroups =from result in empList
                              group result by result.EmpDeptId into groupingData
                              select new EmpGroup() // here
                              {
                                  EmpDeptId = groupingData.Key,
                                  SalarySum = groupingData.Sum(p => p.EmpSalary),
                                  AverageSalary = groupingData.Average(p => p.EmpSalary) 
                              };

               return (IEnumerable<EmpGroup>)numberGroups;

        }
于 2012-08-16T11:20:48.633 に答える