C# 林克,兰姆达超慢

C# 林克,兰姆达超慢,c#,linq,list,where,C#,Linq,List,Where,我有一个只有6个属性的自定义类列表。有一个叫做“状态”的字段 我有一个通用的列表 List<House> hList = GetHomes(); //Holds 204 instances of House int count = hList.Where(x=>x.status == "sold").ToList().Count(); List hList=GetHomes()//拥有204个房屋实例 int count=hList.Where(x=>x.status==

我有一个只有6个属性的自定义类列表。有一个叫做“状态”的字段

我有一个通用的列表

 List<House> hList = GetHomes(); //Holds 204 instances of House
 int count = hList.Where(x=>x.status == "sold").ToList().Count();
List hList=GetHomes()//拥有204个房屋实例
int count=hList.Where(x=>x.status==“已售出”).ToList().count();
执行此操作将返回3,这是正确的,但执行此操作需要10秒


有没有更快的方法?

如果您只需要计数,您可以这样做:

var count = hList.count(x => x.status == "sold");

这将防止重复3次(对于where,然后tolist,然后count)

如果只需要计数,可以执行以下操作:

var count = hList.count(x => x.status == "sold");

这将防止迭代3次(对于where,然后tolist,然后count)

您可以发布GetHomes()的代码吗?您可以跳过.tolist(),但我认为第二行代码不是问题所在。“status”真的是一个字段还是一个属性?您在
status
getter中做了什么吗?您的问题不在这两行codeOff主题中,但您可以这样计算:
int count=hList.count(x=>x.status==“已售出”)status
getter中做了什么吗?您的问题不在这两行codeOff主题中,但您可以这样计算:
int count=hList.count(x=>x.status==“已售出”)
其中的
实际上不会遍历列表。Linq使用延迟执行。它第一次迭代是在
ToList
上,然后再次在
Count
上。但这仍然是一个很好的观点。
其中的
实际上不会在列表中迭代。Linq使用延迟执行。它第一次迭代是在
ToList
上,然后再次在
Count
上。但这仍然是一个很好的观点。