我有一个键值对列出了一些类似的东西
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。 这只是一个示例,在实际情况下,我可以在列表中包含多个字段。 我希望我能说清楚自己。
答案 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 tree和IQueriable interface
的信息如果您不使用Entity Frmework
或OData
之类的东西,基本上可以避免将列表强制转换为IQueriable。但是,如果您需要将LINQ表达式转换为更复杂的东西-您应该使用IQueriable,或构建自己的表达式树。