【发布时间】:2011-05-23 11:43:20
【问题描述】:
我有这个代码
private static IQueryable<Persoon> Filter(IQueryable<Persoon> qF, IDictionary<string, string> filter)
{
IQueryable<Persoon> temp;
temp = qF;
foreach (var key in filter)
{
if (key.Key == "naam")
{
temp = temp.Where(f => f.Naam == key.Value);
}
else if (key.Key == "leeftijd")
{
temp = temp.Where(af => af.Leeftijd != null && af.Leeftijd.AantalJaarOud.ToString() == key.Value);
}
}
return temp;
}
它的作用(它是一个用于测试行为的简化版本)是你给这个函数一个 IQueryable 的 Persoon(来自数据库)和一个过滤器列表。
所以你给过滤器 naam,john 和 leeftijd,30 你会得到所有名为 John 和 Age 30 的 Persoon objecten。
当我首先进入循环时,就在我在它之后的 } 处执行第一个 where(leftijd where)之后,我看到 tmp 有 3 个对象。然后代码在循环中第二次进入,进入第一个 If (where filter eq naam) 并在那里,当我查看 tmp 时,它只有 0 个对象。
它不起作用的第一个观点是,该函数不返回任何结果(应该是 2:3 30 和 2 约翰)。所以我得出的结论是多重。问题出在哪里。
但现在我发现 temp 是空的,甚至在我做第二个 where 之前。
我做错了什么?
【问题讨论】: