首页 > 解决方案 > 动态定义需要识别值的键名

问题描述

我有一个像这样的键值对列表

 List<Subscriptions> subs = new List<Subscriptions>();
subs.Add(new Subscriptions() { Id = 1, Name = "ABC" });
            subs.Add(new Subscriptions() { Id = 1, Name = "DEF" });

我可以搜索一个键(ID 或名称),但我想要实现的是用户定义他们想要搜索ID 或名称的键

现在我正在使用这种方法根据名称值过滤列表

 var filtered = subs.Where(sub => sub.Name.IndexOf(SearchString.Text,StringComparison.OrdinalIgnoreCase) >=0);

sub.Name在这里是静态定义的,我希望用户选择他们希望他们的搜索基于什么

例如,如果我们有abc:Name程序在 Name 键下搜索 abc,如果我们有1:Id,那么它会在 ID 中搜索 1。这只是一个示例,在实际场景中,我的列表中可以有多个字段。我希望我能把自己说清楚。

标签: c#listkeyvaluepair

解决方案


为什么你不Where通过简单的if elseswitch

// keyword : abc:Name or  1:Id
var value = keyword.Split(':')[0];
var key = keyword.Split(':')[1];

if(key == "Name")
{
    var filterred = subs.Where(sub => sub.Name == value);
}
else if(key == "Id")
    var filterred = subs.Where(sub => sub.id == int.Parse(value));
}

推荐阅读