我在将以下代码转换为使用 LINQ 时遇到了一些问题。
int occurs = 0;
foreach (string j in items)
{
if (!string.IsNullOrEmpty(j))
{
WorkflowModule tempWM = new WorkflowModule(j);
if (tempWM.StateID == item.StateID)
{
occurs++;
}
}
}
return occurs;
到目前为止,我有:-
var lstItems = (from lstItem in items
where !string.IsNullOrEmpty(lstItem)
let objWorkflowModule = new WorkflowModule(lstItem)
select new
{
tempWM = objWorkflowModule.StateID
}).Where(item.StateID == tempWM));
return lstItems.Count();
但智能感知不喜欢这句话'。其中(项。状态 ID == tempWM))'
谁能帮我做到这一点?
谢谢。
使用方法语法时,需要在Where
运算符上使用 lambda:
...
}).Where(x => x.tempWM == item.StateID));
换句话说,您需要"声明"变量x
,该变量保存查询前一部分的结果。
看起来 item 没有在语句中的任何位置初始化。
这是我怎么做的
var lstItems = from lstItem in items
where !string.IsNullOrEmpty(lstItem)
let objWorkflowModule = new WorkflowModule(lstItem)
select objWorkflowModule.StateID;
return lstItems.Count(t=> t == item.StateID);
我假设 item 是在您提交的原始代码之外定义的变量。 基本上,您不需要在查询中创建匿名类,您可以将谓词放入您Where
Count
中。 但正如其他人所说,主要问题是你需要将你的谓词表达为 lambda。