2

私がやりたいのは、膨大な数のレコードをでグループ化することですEmployer。次に、少なくとも30レコードを持つグループのみのカウントを持つ整数変数を返したいと思います。

IEには、、、およびにサブ100スクライバーがいます。Employer A20Employer B30Employer C

レコードをグループ化して思いついた

Employer A - 100
Employer B - 20
Employer C - 30

のスカラー変数を返したい2

これが私が現在持っているものです:

var Step1 =
    (from y in recordsActivstJoin
     where y.q.Market.Contains(market) && y.x.ActivistCodeID.Equals(activismCode)
     select new {y}).ToList();

            //this groups my previous query
var Step2 = (from z in Step1 group z by z.y.q.Employer into f select new {f}).ToList();

地元の人を見ると、実際には34行あるステップ1からステップ2の17行にグループ化されていることがわかります。ここで、グループが30以上の人だけに絞り込みます。

助言がありますか?

4

2 に答える 2

5

私はLINQを盲目的に書くのが得意ではありませんが、次のようなものを探していると確信しています。

var Step1 =
                (from y in recordsActivstJoin
                 where y.q.Market.Contains(market) && y.x.ActivistCodeID.Equals(activismCode)
                 select new {y}).ToList();

                        //this groups my previous query
var Step2 = (from i in Step1 group i by i.y.q.Employer into groupedEmployees
select new 
{
    EmployeeCount = groupedEmployees.Count()
}).Where(n=>n.EmployeeCount >= 30).Count();

パトリックは、これを次のように短縮できると指摘しました。

var Step2 = Step1.GroupBy(i => i.y.q.Employer).Count(g => g.Count() >= 30);

Step22あなたの例にあるはずです。お役に立てれば!

于 2012-11-02T02:40:21.087 に答える
1

別の方法として:

  • 雇用主ごとにレコードをグループ化するためのクエリ:

コード:

var groupedRecords = recordsActivstJoin
                     .Where(y => y.q.Market.Contains(market) && y.x.ActivistCodeID.Equals(activismCode))
                     .ToLookup(y => y.q.Employer);
  • 30を超えるエントリを持つグループの数:

コード:

Int32 count = groupedRecords.Count(g => g.Count() >= 30);

ノート:

ToLookupは、通常はそうではないGroupByと比較して、雪崩に対して安全である可能性が最も高いです。これは、データのクエリに使用されるプロバイダーによって異なります。たとえば、LinqToSqlには違いはありませんが、LinqToSqlの場合は、さまざまなデータセットに大きな違いがあります。

ただし、ToLookupは即時実行であるため、グループ化の実行を延期する場合は、別のパスをたどる必要があります。

于 2012-11-02T10:10:00.580 に答える