C# 如何从interface.System.Linq.IQueryable更改var<;out T>;对System.Collections.generic.List进行分类<;T>;
我有以下代码:C# 如何从interface.System.Linq.IQueryable更改var<;out T>;对System.Collections.generic.List进行分类<;T>;,c#,C#,我有以下代码: 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 con
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();
var-allWorkorders=
(来自context.WORKORDERs中的wo)
在context.WORKORDERTYPEs中加入wot,在wo.wot_oi等于wot.wotyoi
在上下文中加入pri.PRIORITies on wo.prio_oi等于pri.priooi
在wo.BEparn_oi上的context.SITEs中加入s等于s.siteoi
其中wo.audt_created_dttm.Value.Year>=now.Year-3&&wo.audt_created_dttm.Value.Year>=2006
&&wo.audt|u dttm<时间范围&&(s.id==“NM”| s.id==“TH”)&&
(wo.clsdt_date??新日期时间(3000,01,01))new{x.id,x.MonthNum})。选择(x=>new{x.Key.id,x.Key.MonthNum,
分母=x.Sum(y=>y.Unit),分子=x.Where(y=>SqlMethods.Like(y.prioid,“1%”)|
SqlMethods.Like(y.prioid,“6%”).Sum(y=>y.Unit),Data\u Indicator=Data\u Indicator,
预算=预算计划工时,行业基准=行业基准,
注释=注释,执行注释=执行注释,
Fleet_Exec_Comments=fleetExecComments}).ToList();
我想创建一个for循环:
for (int counter = 0; counter < allWorkorders.Count; counter++)
{
var item = allWorkorders[counter];
......
for(int counter=0;counter
但是,我得到了以下错误:“'您可以使用foreach循环,也可以将()添加到Count,
for(int counter=0;counter
。在这种情况下,Count不是一个属性,而是一个在IEnumerable上调用的Linq扩展方法,这就是为什么当您只给方法组.Count
而不是调用方法.Count()
时,它会抱怨方法组
另外,这里有两个单独的语句,并且似乎没有将执行
.ToList()
的部分存储在任何位置。您可以使用foreach循环,也可以将()添加到Count,for(int counter=0;counter
。在这种情况下,Count不是一个属性,而是一个在IEnumerable上调用的Linq扩展方法,这就是为什么当您只给方法组.Count
而不是调用方法.Count()
时,它会抱怨方法组
另外,这里有两个单独的语句,并且似乎没有将执行.ToList()
的部分存储在任何位置。ToList()返回一个结果。您需要
var newList = allWorkorders.GroupBy(x => ...).Select(x => ...).ToList();
ToList()返回一个结果
var newList = allWorkorders.GroupBy(x => ...).Select(x => ...).ToList();
它试图使用LINQ扩展方法
Count()
而不是List.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();
它试图使用LINQ扩展方法
Count()
而不是List.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()的那一行)分配给任何对象。您以“Unit=groupItem.Count()”结束了对所有WorkOrder的分配;"
向托利斯脱口秀()将使其返回一个列表,但由于您没有将其分配给任何对象,因此它立即超出范围,您将丢失它。您应该重新思考此代码。如果它非常复杂,以至于您没有看到结果没有分配给某个值,那么显然太复杂了@Panagiotis Kanavos:这并不是因为我不知道它没有分配给某个对象值。我错误地认为它被分配给了所有的工作顺序。这是我的观点。如果你不能很容易地看到这个,它可能太复杂了。我也没有看到这个,直到Resharper缩进code@ProgrammingNewbie不要在@和用户名之间加空格。@PanagiotisKanavos如果你看一下我答案上的评论,那不是OP没有看到分配没有发生,OP不知道分配是必需的。你应该重新思考这段代码。如果代码太复杂,以至于你没有看到结果没有分配给某个值,那么显然太复杂了@Panagiotis Kanavos:不是我不知道它没有分配给某个值。我错信了我的观点是,如果你不能很容易地看到这一点,它可能太复杂了。我也没有看到这一点,直到Resharper缩进code@ProgrammingNewbie不要在@和用户名之间加空格。@PanagiotisKanavos如果你看一下我答案上的评论,并不是OP没有看到as符号没有出现,OP不知道分配是必需的。@Brannon不,不,没有。请参见第二段。@Brannon不,不,没有。请参见第二段。@cadrell0:我明白了。我错误地认为allWorkorders.GroupBy代码被分配给了allWorkorders。一旦我为该代码创建了一个新的var数据类型,它就工作了e、 我想我不明白为什么