【发布时间】:2017-08-26 00:07:03
【问题描述】:
我想使用Linq Where / Select 过滤List,使用Dictionary 中的键值如程序所示,我目前的解决方案有一些限制。
Dictionary 指的是来自 UI 的用户输入,因此它可能包含值的集合,而不是给定键的单个值。
任何可以帮助我找到正确方向的指针。
public class Business
{
public int ID { get; set; }
public string NAME { get; set; }
}
void Main()
{
var businessList = new List<Business>
{
new Business {ID = 1,NAME = "A"},
new Business {ID = 1,NAME = "B"},
new Business {ID = 1,NAME = "C"},
new Business {ID = 2,NAME = "D"},
new Business {ID = 2,NAME = "E"},
new Business {ID = 2,NAME = "F"},
new Business {ID = 3,NAME = "G"},
new Business {ID = 4,NAME = "H"},
new Business {ID = 4,NAME = "I"},
new Business {ID = 4,NAME = "J"},
new Business {ID = 5,NAME = "K"},
new Business {ID = 5,NAME = "L"}
};
var filterDictionary = new Dictionary<string, object>
{
{"ID",3},
{"NAME","G"}
};
Expected Result:
ID Name
3 G
var filterDictionary = new Dictionary<string, object>
{
{"ID",new List<int>(){2,3}}
};
Expected Result:
ID Name
2 D
2 E
2 F
3 G
Current Solution:
var result = businessList
.Select(x => filterDictionary.ContainsKey(typeof(Business).GetProperty("ID").Name) ?
x.ID == (int)filterDictionary[typeof(Business).GetProperty("ID").Name] ? x : null : null
)
.Where(x => x!= null)
.Select(x => filterDictionary.ContainsKey(typeof(Business).GetProperty("NAME").Name) ?
x.NAME == (string)filterDictionary[typeof(Business).GetProperty("NAME").Name] ? x : null : null
);
}
【问题讨论】:
-
预期输出是多少? ID = 3 AND Name = G 的业务对象?或者 ID = 3 OR Name = G?字典可以包含两个以上的项目吗?
-
结果应该是值的组合,即 ID = 3 AND Name = G 在这里。是的,它可以包含在少数情况下不属于业务实体的键,但现在我最好假设字典只能包含有效键
-
但是在这种情况下,字典中有三四个项目是什么意思?例如,如果字典包含以下内容:ID = 2、ID = 4、NAME = E,该怎么办? NAME = H?
-
@YacoubMassad 这只是意味着后过滤,可能有一个空的结果,因此没有可用的匹配
-
因此,如果字典中有多个 ID 具有不同的值,则结果将为空。 NAME也一样,对吧?
标签: c# linq dictionary