2010-12-27 23 views
1

に従って、私は、次のコレクションどのようにLINQを使用してコレクションからグループ項目と形のデータを返すコレクション型

public IQueryable<myObjectType > GetWorkCellLoadGraphDataByIdDummy() 
    { 
     IList<myObjectType> workCellLoadGraphDataCollection = new List<myObject>() 
      { 
       new myObjectType(DateTime.Today.AddHours(8).AddMinutes(30), 1), 
       new myObjectType(DateTime.Today.AddHours(10).AddMinutes(10), 6), 
       new myObjectType(DateTime.Today.AddHours(13).AddMinutes(30),8), 

       new myObjectType(DateTime.Today.AddDays(1).AddHours(8).AddMinutes(30), 1), 
       new myObjectType(DateTime.Today.AddDays(1).AddHours(10).AddMinutes(10), 5), 
       new myObjectType(DateTime.Today.AddDays(1).AddHours(13).AddMinutes(30), 2) 
      }; 


     // Write some LINQ code to group data according to first parameter 
     // Perform sum of last parameter 
     // Shape the data to be in the form of myObjectType 

     // return result; 
    } 

を持っており、私がやりたいことの最初のパラメータによって、グループ項目にありますmyObjectTypeクラス。

各グループについて、最後のすべてのパラメータの合計を計算したいと思います。

最後に結果が「myObjectType」の形式で返されるべき

私はそれを、すなわち、すべてのアイテムをループして合計をやって昔ながらの方法を行う方法を知っています。しかし、私はちょうど始めたことであるLINQでそれを行う方法を学びたいと思います。

私の要件をLINQに変換できるように誰でも正しい方向に向けることができますか?コレクション内

  • 第1の目的は、(DateTime.Todayは、15)コレクション内
  • 第2の目的は、ある日時(以下のよう

    は実際には、結果は、タイプmyObjectTypeの2つのオブジェクトを含むコレクションでなければなりません.Today.AddDays(1)、8)

TIA、

デビッド

答えて

3

あなたは、以下の方法でLINQを使用して、あなたの要件を満たすことができ、この基本設計

class MyObjectType 
{ 
    public MyObjectType(DateTime date, int count) 
    { 
     this.MyDate = date; 
     this.MyCount = count; 
    } 

    public DateTime MyDate { get; set; } 
    public int MyCount { get; set; } 
} 

を持つクラスを考えます。最初の例は、流暢な拡張メソッド構文を使用してIEnumerable<MyObjectType>を生成します。

var query = collection.GroupBy(obj => obj.MyDate.Date) 
         .Select(grp => 
           new MyObjectType(grp.Key, grp.Sum(obj => obj.MyCount)) 
          ); 

2番目のバージョンでは、同じ結果が得られますが、より多くのSQL-esqueクエリ式構文が使用されます。

var query = from obj in collection 
      group obj by obj.MyDate.Date into grp 
      let mySum = grp.Sum(item => item.MyCount) 
      select new MyObjectType(grp.Key, mySum); 

そこから、あなたはIQueryable結果を得るために拡張メソッドAsQueryableを利用、またはToList()/ToArray()は、具体的なコレクションを生成します。

+0

アンソニー、ありがとう、それは私が必要としていたものです。 – DavidS

関連する問題