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

它正在尝试使用 LINQ 扩展方法方法Count()而不是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

您没有将第二行(带有 ToList() 的那一行)分配给任何内容。您结束了 allWorkOrders 的分配:“Unit = groupItem.Count()});”

删除 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在这种情况下,Count 不是属性,而是您在 IEnumerable 上调用的 Linq 扩展方法,这就是为什么当您只给出方法组而不是调用方法时它会抱怨方法组.Count()

此外,您在那里有两个单独的语句,并且似乎没有将您正在执行的部分存储在.ToList()任何地方。

于 2012-06-08T16:31:39.257 回答