可以在变量中存储此linq语句中的Where条件吗?
Func<NutritionValues, bool> condition;
if (isBarcode)
condition = f => f.barcode == name;
else
condition = f => f.food == name;
var foods = context.NutritionValues.Where(condition).
Select(f => new SerializableFood
{
Name = f.food,
Calories = f.energy_kcal,
Carbohydrates = f.carbohydrates,
Fats = f.fats,
Proteins = f.protiens
});
条件是100%正确。如果我将条件f => f.barcode == name
直接写入其中有效的Where函数,但这种方式不行。此代码返回空集。拜托,你知道为什么吗?
答案 0 :(得分:2)
您可能正在使用LINQ to SQL或类似的东西。
您应该将变量更改为Expression<Func<NutritionValues, bool>>
;这将允许查询提供程序解析您的条件。
答案 1 :(得分:0)
哦,我的,这里可能会发生很多事情。首先,您应该将condition
键入Expression<Func<NutritionValues, bool>>
。这将让您的查询提供程序正确解析它。
其次,您正在捕获变量(name
),并且如果您在捕获时间和查询实际执行时间之间修改该变量的值(请注意,查询不会执行,直到你迭代foods
,它没有在你向我们展示的任何代码中执行过,你会看到不同于你预期的结果。有关此主题的更多信息,请参阅Closing over the loop variable considered harmful。