我遇到了以下问题: 我想加载一个List,但我可以传递多个参数,这可能是找到我想要的列表的标准。 现在我有以下结构:
House{
Name;
ID;
Alias;
}
我也有:
Person{
Name;
Alias;
}
这意味着,1个房子可以容纳多个人,同名的多个人可以在多个房子里。 所以现在我想打电话给我的功能e.G. " GetHouses(字符串标准)"标准可以是:
现在我只是阅读每个房子及其数据,然后我按照标准选择。
重要提示:在此之前我无法更改逻辑!
所以现在当我尝试找到匹配标准时,我想出了使用LINQ,因为它非常快。只要我不与人物进行比较,它就会起作用:
result = (from x in result
where (
(string.Equals(x.Name, criteria))
|| (string.Equals(x.ID, criteria))
|| (x.Name.Contains(criteria))
select x).ToList();
现在我想将每个人加载到我找到的房屋中,并检查房屋中的人员名称是否符合标准。 有没有办法在我已经在LINQ中做到这一点? 或者我必须通过以下结果查看结果:
result.ForEach(x => ...)
如果能与LINQ一起使用会很好。 我用
做了类似的逻辑result.FindAll(new Predicate<House>((x) => { ... LoadPersons(criteria) {... } }));
但这需要很长时间。
亲切的问候, Asat0r
答案 0 :(得分:1)
假设您的PersonList
课程中有House
,您可以使用Enumerable.Any
:
var matchingHouses = from house in allHouses
where string.Equals(house.Name, criteria)
|| string.Equals(house.ID, criteria)
|| house.Name.Contains(criteria)
|| house.PersonList.Any(resident => string.Equals(resident.Name, criteria))
select house;
如果您有返回“居民”的方法,可以使用此方法。如果您以后想要访问这些人,您可以创建一个匿名类型来存储它们:
var housesAndResidents = from house in allHouses
let matchingResidentList = LoadPersons(house.ID)
.Where(resident => string.Equals(resident.Name, criteria))
.ToList()
where string.Equals(house.Name, criteria)
|| string.Equals(house.ID, criteria)
|| house.Name.Contains(criteria)
|| matchingResidentList.Any()
select new { house, matchingResidentList };
您可以通过以下方式访问这些属性:
var matchingHouseList = housesAndResidents.ToList();
// you don't need the list, you can use foreach directly,
// but whenever you access housesAndResidents you will execute that query
// ToList materializes this query into a collection, so you can enumerate it or use the Count property
foreach(var x in matchingHouseList )
{
Console.WriteLine("House:{0} Matching-Resident(s):{1}"
, x.house.Name
, String.Join(", ", x.matchingResidentList.Select(r => r.Name)));
}
答案 1 :(得分:0)
以下是使用三个类的简单解决方案:driver = webdriver.Firefox(executable_path='')
driver.implicitly_wait(12)
driver.switch_to_frame("bvmf_iframe")
driver.get("http://www.bmfbovespa.com.br/pt_br/produtos/listados-a-vista-e-derivativos/renda-variavel/empresas-listadas.htm")
driver.find_element_by_id("ctl00_contentPlaceHolderConteudo_BuscaNomeEmpresa1_btnTodas")
,Program
和House
。
班级Person
&#34;房屋&#34; (双关语)一个类House
的列表(以及您自己的值:name,id和alias)。通过这种方式,居民是房子的一部分,而不是存储在其他地方。将居民存放在Person
课程之外与将背包箱内的午餐盒内容放在一起是一样的。
班级House
存储有关该房屋居民的基本信息。在Person
课程中列出居民列表可以更轻松地将搜索条件与人员进行比较。
在课程House
中,您会找到Program
和Main
课程。这些有点解释自己
FindHouses
我不知道你的代码中是否有太大的变化,但无论如何,我希望这会有所帮助。
我知道你提到过你并不想把这些人装进房子里,但是这样可以根据&#34;所有价值观来搜索房屋。更容易