c# - 动态定义需要识别值的键名
问题描述
我有一个像这样的键值对列表
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。这只是一个示例,在实际场景中,我的列表中可以有多个字段。我希望我能把自己说清楚。
解决方案
为什么你不Where
通过简单的if else
或switch
// 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));
}
推荐阅读
- javascript - 使用 Lodash 查找对象数组中新添加的元素
- python - 熊猫使用列表转换多列的数据类型
- python - Python 读取 100 多个 CSV 文件并将每个 CSV 文件中的列总和返回到新的 csv 中
- python - 访问 SQLite DB /w python 并获取格式错误的 DB
- javascript - 机器人找不到我的一个公会成员
- google-chrome - 断字连字符如何与复制粘贴一起使用(在 LaTeX / PDF 中)
- python - 如何在python字符串格式中仅添加不带括号的列表值
- selenium-webdriver - Appium c# windows显示异常:目前仅支持笔和触摸指针输入源类型
- c++ - Visual Studio 无法识别 boost::asio
- android - 增加选项卡布局中选项卡上的宽度自定义视图