3

RawResults私は場所RawResultsと日付である タイプのArrayListを持っています

public class RawResult
{
    public string location { get; set; }
    public DateTime createDate {get; set; }

    public RawResults(string l, DateTime d)
    {
        this.location = l;
        this.createDate = d;
    }
}

LINQ を使用して、それぞれの個別の場所と、配列リストに表示される回数を含むリストを作成したいと考えています。SQLでそれを行うことができれば、次のようになります

select 
   bw.location, 
   count(*) as Count
from 
   bandwidth bw, 
   media_log ml
where
   bw.IP_SUBNET = ml.SUBNET
   group by bw.location
   order by location asc

後で私も同じことをしなければなりませんが、指定された日付範囲内です。

UPDATEこれは、すべてのデータを取得するために実行されたクエリですrawData

SELECT        
    MEDIASTREAM.BANDWIDTH.LOCATION, MEDIASTREAM.MEDIA_LOG.CREATE_DATE
FROM            
    MEDIASTREAM.BANDWIDTH INNER JOIN
      MEDIASTREAM.MEDIA_LOG ON MEDIASTREAM.BANDWIDTH.IP_SUBNET =     
      MEDIASTREAM.MEDIA_LOG.SUBNET

次に、返されたデータをクエリして、rawDataさまざまな結果セットを取得する必要があります。クエリするリストを利用できます。

4

2 に答える 2

6

あなたはこれを行うことができます:

var results = 
    (from bw in data.bandwith
     join ml in data.media_log on bw.IP_SUBNET equals ml.SUBNET
     group bw by bw.location into g
     orderby g.Key
     select new 
     { 
         location = g.Key, 
         Count = g.Count() 
     })
    .ToList();

であることToListがどうしても必要な場合を除き、は必要ありませんList<T>。時間でフィルタリングするには、次のようにします。

var results = 
    (from bw in data.bandwith
     join ml in data.media_log on bw.IP_SUBNET equals ml.SUBNET
     where bw.createDate >= minDate && bw.createDate <= maxDate
     group bw by bw.location into g
     orderby g.Key
     select new 
     { 
         location = g.Key, 
         Count = g.Count() 
     })
    .ToList();

関係がない場合media_logは、次を省略できますjoin

var results = 
    from bw in data.bandwith
    group bw by bw.location into g
    orderby g.Key
    select new 
    { 
        location = g.Key, 
        Count = g.Count() 
    }

または流暢な構文で:

var results = data.bandwith
    .GroupBy(bw => bw.location, (k, g) => new { location = k, Count = g.Count() })
    .OrderBy(r => r.location);

日付でフィルタリングするには、次のようにします。

var results = 
    from bw in data.bandwith
    where bw.createDate >= minDate && bw.createDate <= maxDate
    group bw by bw.location into g
    orderby g.Key
    select new 
    { 
        location = g.Key, 
        Count = g.Count() 
    };

または流暢な構文で:

var results = data.bandwith
    .Where(bw => bw.createDate >= minDate && bw.createDate <= maxDate)
    .GroupBy(bw => bw.location, (k, g) => new { location = k, Count = g.Count() })
    .OrderBy(r => r.location);

ArrayList、またはその他の非ジェネリック コレクション型を Linq クエリで使用するには、次のようにCast<T>またはOfType<T>メソッドを使用することに注意してください。

var results = bandwithArrayList
    .Cast<RawResults>()
    .GroupBy(bw => bw.location, (k, g) => new { location = k, Count = g.Count() })
    .ToList();
于 2013-06-18T18:52:27.887 に答える
3
List<RawResult> results = MethodToGetResults();

var locationCount = results
     .GroupBy(r => r.location)
     .Select(lc => new {Location = lc.location, Count = lc.Count()});
于 2013-06-18T18:54:19.783 に答える