Linq查询引用对象和字符串数组

时间:2011-04-06 14:55:59

标签: c# .net linq

我在转换以下代码以使用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))'

任何人都可以帮助我实现这个目标吗?

感谢。

3 个答案:

答案 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。