C# Lambda表达式。返回与文本匹配的对象

C# Lambda表达式。返回与文本匹配的对象,c#,selenium,lambda,C#,Selenium,Lambda,大家早上好 这可能是周一情绪低落的结果,但我不能对此置之不理。我试图返回一个与我们传入的文本匹配的对象 public Dictionary<IWebElement, ReadOnlyCollection<IWebElement>> Cells; public IWebElement FindCellByText(string pText) { return Cells.Select(m => m.Value).Select(m => m.FirstOr

大家早上好

这可能是周一情绪低落的结果,但我不能对此置之不理。我试图返回一个与我们传入的文本匹配的对象

public Dictionary<IWebElement, ReadOnlyCollection<IWebElement>> Cells;
public IWebElement FindCellByText(string pText)
{
    return Cells.Select(m => m.Value).Select(m => m.FirstOrDefault<IWebElement>(e=> e.Text == pText));
}
公共字典单元;
公共IWebElement FindCellByText(字符串pText)
{
返回单元格.Select(m=>m.Value).Select(m=>m.FirstOrDefault(e=>e.Text==pText));
}
错误:“System.Collections.Generic.IEnumerable”到“OpenQA.Selenium.IWebElement”。存在显式转换(是否缺少强制转换?) 上面的代码试图获取单个单元格。单元格分为行(键)和值(单元格)

循环遍历每一行,检查每一个单元格是否与文本匹配并返回


感谢您的帮助

您可以使用
SelectMany
而不是
Select
来获得预期的结果,如以下代码:

public IWebElement FindCellByText(string pText)
{
    return Cells.SelectMany(m => m.Value).FirstOrDefault(e => e.Text == pText);
}

我会做类似的事情:

return Cells.Select(row => row.Value)
            .SelectMany(q => q)
            .FirstOrDefault(item => item.Text.Equals(pText));
Cells.Select(row=>row.Value)
part投影一组只读集合对象(
IEnumerable

然后,使用
.SelectMany(q=>q)
将集合展平,从而将其转换为
IEnumerable

接下来,应用
.FirstOrDefault(item=>item.Text.Equals(pText))
查询来提取满足条件的第一个元素(如果不存在,则为null)

我希望它能帮助你