4

従業員のリストがあり、従業員全員に EmployeeValuesCollection と呼ばれるネストされた別のリストがあります。

だから私のクラスは次のようなものです:-

public Employee(int employeeID, string jobTitle, int companyID, 
        List<EmployeeValues> employeeValuesCollection)
{
      EmployeeID = employeeID;
      JobTitle = jobTitle;
      CompanyID = companyID;
      EmployeeValuesCollection = employeeValuesCollection;
 }

今、私はLINQで別のオブジェクトからこのオブジェクトを設定したいのですが、これまでのところ私は持っています:-

List<DataFileRow> dataFiles = dfRow.Rows;
dataFiles
     .ForEach(l => employeeList
                      .Add(new Employee(l.EmpID, l.JobTitle, l.CompID)));

それは機能しますが、ステートメントに employeeValuesCollection を追加する方法がわかりません。することは可能ですか?

だから私は次のようなことを考えていました:-

dataFiles
     .ForEach(l => employeeList
                     .Add(new Employee(l.EmpID, l.JobTitle, l.CompID, 
                          new List<EmployeeValuesCollection> .............)));

あなたの助けと時間をありがとう。

4

2 に答える 2

4

Employee コンストラクター内の入力パラメーター employeeValuesCollection リストを反復処理して、EmployeeValues 型のローカル変数を作成し、それを Employee クラスのインスタンス リスト変数に追加することをお勧めします。EmployeeValuesCollection = employeeValuesCollection; を使用すると、実際に参照が割り当てられます。したがって、employeeValuesCollection のいくつかの値を変更すると、同じ変更が EmployeeValuesCollection に反映されます。

public Employee(int employeeID, string jobTitle, int companyID, List<EmployeeValues> employeeValuesCollection)
    {
        EmployeeID = employeeID;
        JobTitle = jobTitle;
        CompanyID = companyID;

        foreach (var obj in employeeValuesCollection)
        {
            var empVal = new EmployeeValues() { Name = obj.Name};
            EmployeeValuesCollection.Add(empVal);
        }

また、LINQ ステートメントを次のように使用できます。

dataFiles.ForEach(l => employeeList.Add(new Employee(l.EmpID, l.JobTitle, l.CompID, l.EmployeeValuesCollection)));
于 2012-04-26T08:44:35.327 に答える
1

各行に対して Linq プロジェクションを使用できます。私は「適切な」linqでそれを行います:

employeeList = (from r in dfRow.Rows
  select new Employee(r.EmpID, r.JobTitle, r.CompID, 
   new List<EmployeeValues>(/*parameter*/))).ToList();

EmployeeValues実際の内容 (およびアクセス元のプロパティ)を指定するまでは、DataFileRowこれ以上言うのは困難です。しかし、それが単なるプロパティであるとしましょう。それらはキーと値のペアのようなものであると要約します (型の名前が複数形になっているにもかかわらず、少し混乱します)。

私はあなたの質問に対する 3 番目のコメントから名前をここに取りましDataFileRowEmployeeValues。それに基づいて、内部投影を使用できます。

employeeList = (from r in dfRow.Rows
  select new Employee(r.EmpID, r.JobTitle, r.CompID, 
   new List<EmployeeValue>((from v in r.EmployeeValues
    select new EmployeeValues(v.title, v.value, v.isVisible))).ToList());
于 2012-04-26T08:52:31.597 に答える