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

本文关键字:字符串 数组 对象 查询 引用 Linq | 更新日期: 2023-09-27 17:48:55

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

谁能帮我做到这一点?

谢谢。

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

使用方法语法时,需要在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。