动态定义需要标识其值的键名

时间:2018-11-12 09:07:58

标签: c# list keyvaluepair

我有一个键值对列出了一些类似的东西

 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。 这只是一个示例,在实际情况下,我可以在列表中包含多个字段。 我希望我能说清楚自己。

2 个答案:

答案 0 :(得分:2)

为什么不通过简单的require_once("common-head.php");Where来应用if else

switch

答案 1 :(得分:2)

快速答案:

string name = "";
int? id = null;

List<Subscriptions> subs = new List<Subscriptions>();

var query = subs.AsQueryable();
if (!string.IsNullOrEmpty(name))
    query = query.Where(p => p.Name == name);
if(id.HasValue)
    query = query.Where(p => p.id == id.Value);

var result = query.ToArray();

详细的答案:您可以阅读有关expression treeIQueriable interface

的信息

如果您不使用Entity FrmeworkOData之类的东西,基本上可以避免将列表强制转换为IQueriable。但是,如果您需要将LINQ表达式转换为更复杂的东西-您应该使用IQueriable,或构建自己的表达式树。