我有一组字符串。我需要从这个集合中找出满足某些条件的字符串,例如:该字符串包含A和B或C.这些条件由用户指定,因此它们是动态的。在Linq它应该是类似的,
List<String> items = new List<string> { "sdsdsd", "sdsd", "abc"};
var query = from item in items
where item.Contains("a") && item.Contains("b") || item.Contains("c")
select item;
我想使where条件动态化,以便它可以适用于用户的任何输入。是否可以在C#中执行此操作而不使用任何外部库。也许使用Linq或内置于.Net框架中的其他东西。
谢谢, 加里
答案 0 :(得分:5)
虽然你不想使用外部库,但有一个很棒,那就是PredicateBuilder。谓词构建器允许您构建一组谓词来匹配项目,例如:
var predicate = PredicateBuilder.True<string>();
predicate = predicate
.And(p => p.Contains("a"))
.And(p => p.Contains("b"));
var matches = items.Where(predicate);
答案 1 :(得分:1)
alt text http://www.scottgu.com/blogposts/dynquery/step2.png
你需要这样的东西吗?使用the Linq Dynamic Query Library(下载包含示例)。
查看ScottGu's blog了解更多示例。
答案 2 :(得分:1)
如果您想自己动手,请从这里开始: 动态谓词: http://msdn.microsoft.com/en-us/library/bb513731.aspx 动态表达树: http://msdn.microsoft.com/en-us/library/bb882637.aspx
我认为这比您想要的更多,并且强烈建议使用一些(轻量级)准备和测试的库,它可以为您执行从用户字符串到运行时查询的转换。