我正在存储自定义类类型的对象集合。我已经给出了以下类型。
public class AnonymousClient
{
private string ipAddress, city, country, category;
private Guid id;
}
我可能必须根据城市,国家,类别等过滤对象。我能够想到两种方式 -
Dictionary<Guid, AnonymousClient>
并使用Linq过滤
对象。DataTable
中
成员的多个列
并使用DataTable.Select()来
过滤记录。我猜两个都在内部循环。哪一个更快更优雅?任何见解?
答案 0 :(得分:0)
我会采用第一种方法。但是你真的需要将它们存储在字典中吗?你已经将它们收藏在一个集合中吗?您可以使用LINQ来过滤集合本身。
var cityFiltered = from p in AnonymousClientList where p.city == 'London' select p;
等..并构建您的过滤集合。
<强> ====== UPDATE == 强>
以下是使用city过滤的更新查询:
var filtered = (from c in clients where c.Value.city=="London" select c).ToDictionary(x => x.Key, x => x.Value);
如果你看到,第一部分基本上为你的条件返回一个布尔值,而不是你需要的字典对象。通过使用ToDictionary方法,您可以转换回Dictionary。因此,现在执行LINQ之后,您将把所有AnonymousClient与city设置为London。
答案 1 :(得分:0)
使用DataTable会增加相当多的开销。设置后运行查询会更容易,因为它的代码已经创建,但运行速度不快。
如果您想使用id
查找项目,可以使用Dictionary<Guid, AnonymousClient>
,如果您只想过滤其他字段中的数据,则可以使用List<AnonymousClient>
。
最有效的方法是自行循环收集并挑选出项目。 LINQ几乎同样有效,但它增加了一点点开销。另一方面,LINQ代码变得非常简单。
使用LINQ扩展方法Where
:
var companies = clients.Where(c => c.category == "Company");