0

次のコードがあります。

var allWorkorders =

            (from wo in context.WORKORDERs
            join wot in context.WORKORDERTYPEs on wo.wot_oi equals wot.wotyoi
            join pri in context.PRIORITies on wo.prio_oi equals pri.priooi
            join s in context.SITEs on wo.BEparn_oi equals s.siteoi
            where wo.audt_created_dttm.Value.Year >= now.Year - 3 && wo.audt_created_dttm.Value.Year >= 2006
                && wo.audt_created_dttm < timeframe && (s.id == "NM" || s.id == "TH") &&
                (wo.clsdt_date ?? new DateTime(3000, 01, 01)) < DateTime.Now
            group pri by new {s.id, pri.prioid, MonthNum = (wo.clsdt_date ?? new DateTime(3000, 01, 01)).Year * 100 +
                (wo.clsdt_date ?? new DateTime(3000, 01, 01)).Month} into groupItem
            orderby groupItem.Key.MonthNum, groupItem.Key.id
            select new {groupItem.Key.id, groupItem.Key.prioid, groupItem.Key.MonthNum, Unit = groupItem.Count()});

            allWorkorders.GroupBy(x => new { x.id, x.MonthNum }).Select(x => new {x.Key.id, x.Key.MonthNum,
            Denominator = x.Sum(y => y.Unit), Numerator = x.Where(y => SqlMethods.Like(y.prioid, "1%") || 
            SqlMethods.Like(y.prioid, "6%")).Sum(y => y.Unit), Data_Indicator = DATA_INDICATOR,
            Budgeted = budgetedPlannedOutageHrs, Industry_Benchmark = INDUSTRY_BENCHMARK,
            Comments = comments, Executive_Comments = executiveComments, 
            Fleet_Exec_Comments = fleetExecComments}).ToList();

for ループを作成したい:

for (int counter = 0; counter < allWorkorders.Count; counter++)
{
    var item = allWorkorders[counter];
    ......

ただし、次のエラーが表示されます:「「<」は「int」型および「メソッド グループ」型のオペランドには適用できません」

そのため、allWorkorders を ToList() に移動しても、リストとして認識されません。

私は何を間違っていますか?過去にこれを行ったことがありますが、最大の違いは、過去のケースでは ToList が select ステートメントの最後にあったことです。

4

4 に答える 4

2

Count()ではなく、LINQ 拡張メソッド method を使用しようとしています。List<T>.Count

これを行う理由は、結果ToList()を何にも割り当てていないためです。戻り値を使用していないため、このステートメント全体は基本的に無視されます

allWorkorders.GroupBy(x => new { x.id, x.MonthNum }).Select(x => new {x.Key.id, x.Key.MonthNum,
Denominator = x.Sum(y => y.Unit), Numerator = x.Where(y => SqlMethods.Like(y.prioid, "1%") || 
SqlMethods.Like(y.prioid, "6%")).Sum(y => y.Unit), Data_Indicator = DATA_INDICATOR,
Budgeted = budgetedPlannedOutageHrs, Industry_Benchmark = INDUSTRY_BENCHMARK,
Comments = comments, Executive_Comments = executiveComments, 
Fleet_Exec_Comments = fleetExecComments}).ToList();
于 2012-06-08T16:32:19.557 に答える
2

2 行目 (ToList() のある行) は何にも割り当てていません。「Unit = groupItem.Count()});」で allWorkOrders の割り当てを終了しました。

ToList() をドロップするとリストが返されますが、何にも割り当てていないため、すぐにスコープ外になり、リストを失います。

于 2012-06-08T16:33:00.887 に答える
1

ToList() は結果を返します。次のようなものが必要です

var newList = allWorkorders.GroupBy(x => ...).Select(x => ...).ToList();
于 2012-06-08T16:32:09.463 に答える
0

代わりに foreach ループを使用するか、() を Count に追加することができますfor (int counter = 0; counter < allWorkorders.Count(); counter++)。この場合、 Count はプロパティではなく、IEnumerable で呼び出している Linq 拡張メソッド.Countです.Count()

.ToList()また、そこには2つの別々のステートメントがあり、実行している部分をどこにも保存していないようです。

于 2012-06-08T16:31:39.257 に答える