在C#中动态评估字符串条件

时间:2010-07-06 12:33:46

标签: c# .net linq string dynamic

我有一组字符串。我需要从这个集合中找出满足某些条件的字符串,例如:该字符串包含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框架中的其他东西。

谢谢, 加里

3 个答案:

答案 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

我认为这比您想要的更多,并且强烈建议使用一些(轻量级)准备和测试的库,它可以为您执行从用户字符串到运行时查询的转换。