使用lambdas使用多维数组或过滤器参数映射进行过滤?

时间:2016-06-08 09:47:26

标签: c# arrays lambda

鉴于我有一组对象和一组key = value对,我将如何构造一个lambda(或者,如果lambda不合适,另一个表达式),以便它根据设置过滤原始集合。第二。

示例:一组任务并给出一个包含type = flight和location = USA的地图,返回在美国的所有飞行任务。

这个问题与另一个问题相关,但由于它们是不同的东西,我提出了两个问题。

假设我有类似的东西:

Dictionary<string, string> filters; //type and location are keys, flight and USA are the values, respectively
List<Mission> missions; 

目前我们有类似的东西:

var badIds;
return missions.Where(x => !badIds.contains(x.ids)))
    .Select(x => x.ids);

问题是,在这种情况下,我必须在编译时知道我想基于id进行过滤,并使用像集合这样的单维数组来完成它。我想使用两个维度,不仅包括我要查找的值,还包括要查看的参数,同时还根据参数的数量动态扩展过滤操作的数量。他们可以指定一个,另一个,两个,更多参数,更少,任何组合等(0参数可能是特殊情况,但这很容易)。

我想要类似的东西:

for ( KeyValuePair kvp in filters )
{
    missions = missions.Where(x => x.(kvp.Key) == kvp.Value);
}
//I'm new to lambdas and C# so this is probably terrible. 

2 个答案:

答案 0 :(得分:0)

根据您的描述,这就是我想要收集的内容:

IEnumerable<Mission> FindMissions(IEnumerable<Mission> missions, string flight, string location)
{
    var results = new List<Mission>();
    foreach (Mission m in missions)
    {
        if (m.Type == flight && m.Location == location) 
        {
            results.Add(m);
        }
    }
    return results;
}

答案 1 :(得分:0)

我发布了自己的解决方案,因此可以判断。让我知道你们的想法。

 SELECT * FROM `tb_users` ORDER BY RAND() LIMIT 1

我之前从未做过反思,所以性能影响未知。