我有以下代码:
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'和'方法组'的操作数"
因此,即使我将所有工作订单都发送到 ToList(),它也没有被识别为列表。
我做错了什么? 我过去做过这个,最大的区别是在过去的情况下,我的ToList在选择语句的末尾。
它试图使用 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();
您没有将第二行(带有 ToList())的行)分配给任何内容。 您以"Unit = groupItem.Count()});"结束了所有工作订单的分配:"
删除 ToList() 将使它返回一个列表,但由于您没有将其分配给任何内容,因此它会立即超出范围并丢失它。
ToList() 返回一个结果。你需要类似的东西
var newList = allWorkorders.GroupBy(x => ...).Select(x => ...).ToList();
您可以使用 foreach 循环代替,也可以将 () 添加到 计数, for (int counter = 0; counter < allWorkorders.Count(); counter++)
.在这种情况下,Count 不是一个属性,而是一个 Linq 扩展方法,你在 IEnumerable 上调用它,这就是为什么当你只给它.Count
一个方法组而不是调用方法组.Count()
时,它会抱怨它。
在那里有两个单独的语句,并且似乎没有将您正在对其执行.ToList()
的部分存储在任何地方。