我在转换以下代码以使用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();
但是intellisense不喜欢'。(Where.StateID == tempWM))'
任何人都可以帮助我实现这个目标吗?
感谢。
答案 0 :(得分:6)
使用方法语法时,需要在Where
运算符上使用lambda:
...
}).Where(x => x.tempWM == item.StateID));
换句话说,您需要“声明”包含查询前一部分结果的变量x
。
答案 1 :(得分:0)
在您的陈述中的任何地方看起来都没有初始化项目。
答案 2 :(得分:0)
以下是我如何做到这一点
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。