fra*_*ein 9 c# linq ienumerable generic-collections
我写了一行代码已经很久了,所以,如果我问一个愚蠢的问题,请耐心等待.
尽管IntelliSense在Names之后显示了Intersect方法,但在尝试比较两个IEnumerables时出现以下错误.
我试图比较数据库查询的结果与html中的有序列表.
'IEnumerable'不包含'Intersect'的定义,并且最好的扩展方法重载'Queryable.Intersect(IQueryable,IEnumerable)'需要'IQueryable'类型的接收器
namespace Data.Repositories
{
public class StudentsRepository
{
public class Student
{
public string FullName { get; set; }
}
public static IEnumerable<Student> GetData(string CardNumber, string Section)
{
// FullName varchar(300) in Database
return CommonFunctions.ExecuteReader1<Student>(QryStudentSectionDetails(CardNumber, Section)).AsQueryable();
}
}
}
namespace Tests.ActionsLibrary.StudentPaper
{
public class StudentActions:TestBase
{
bool IsMatch = false;
// Get Names from DataBase
IEnumerable<Student> Names = GetData(CardNumber, Section);
// Get Names from Ordered list in HTML
IEnumerable<IWebElement> OrderedList = driver.FindElements(By.XPath("//li[@ng-repeat='Names']"));
if (Names.Count() == OrderedList.Count() && Names.Intersect(OrderedList).Count() == OrderedList.Count()) // The error is shown here.
{ IsMatch = true; }
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么.任何帮助将不胜感激.谢谢.
最后,代码如下所示:
IEnumerable<string> Names = GetData(CardNumber, Section).Select(s => s.FullName);
IEnumerable<string> OrderedList = driver.FindElements(By.XPath("//li[@ng-repeat='Names']")).Select(i => i.Text);
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
Mar*_*zek 12
那是因为Intersect
要求两个集合属于同一类型.你试图用它的集合或Student
集合来调用它IWebElement
.
在调用之前确保您有两个相同类型的集合,Intersect
或者使用不同的方法来完成您的任务.
您可以将两个集合都投射到可以轻松比较的内容中(例如IEnumerable<string>
):
var studentNames = Names.Select(student => student.Name);
var webElementNames = OrderedList.Select(webElement => webElement.Name);
Run Code Online (Sandbox Code Playgroud)
或者您可能All
会这样做:
if(Names.All(student => OrderedList.Any(webElement => webElement.Name == student.Name)))
Run Code Online (Sandbox Code Playgroud)
我不知道你要比较什么属性,所以用有意义的东西替换谓词.
归档时间: |
|
查看次数: |
5783 次 |
最近记录: |