【发布时间】:2013-06-01 14:14:31
【问题描述】:
我有一个从实体框架模型创建的对象列表,如下所示:
List<Model.Log> logs = db.Log.ToList();
我目前正在为此列表实现一些过滤器,这些过滤器显示在 MVC 视图上。
我要做的只是通过用户输入的文本过滤此列表的结果,但是我发现的示例演示了过滤字符串或整数,而不是对象的多个属性。
我愿意使用不同的集合类型,只要有一种相对简单的方法可以通过对象属性的文本过滤集合。
非常感谢所有帮助!
【问题讨论】:
-
这不是一项简单的任务。想象一下在 Google 中解析文本和搜索内容需要什么。尽管您的实现更加有限,但您需要解析字符串,然后将其插入到 LINQ 中存在的功能中。
-
您可以使用反射来获取任意对象的所有属性,然后按照乔治约翰斯顿的方法检查它们是否包含字符串。
-
@keyCrumbs 您可以使用 LINQ,但并非必须如此。如果您愿意,可以使用 LINQ 重写上面的示例代码。另请注意,如果您的“日志”具有一个也是集合的属性,则不应仅对其执行 ToString,而应忽略或使用相同的技术进行更深入的解析。
-
@keyCrumbs 还注意到这种技术的性能可能很糟糕,这取决于许多方面,还有内存使用情况......所以如果我试图过滤具有已知属性的对象,我会把它放在那里一定要像乔治一样进行查询,无需反思。
-
@keyCrumbs 如果我理解正确,您可以执行类似 db.Log.Where(q=>q.Property1.Contains(text)||q.Property2.Contains(text)|| Property3.Contains(text)) 将返回匹配任一属性的结果,因为我们将 em 与 OR 运算符组合在一起。
标签: c# search collections filter