Linq-如何存储;where条件“;可变的
是否可以将linq语句中的Where条件存储在变量中Linq-如何存储;where条件“;可变的,linq,linq-to-entities,Linq,Linq To Entities,是否可以将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).
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
});
Func条件;
如果(isBarcode)
条件=f=>f.barcode==名称;
其他的
条件=f=>f.food==名称;
var foods=上下文。营养值。其中(条件)。
选择(f=>newserializablefood
{
名称=食品,
卡路里=f.能量(千卡),
碳水化合物=f.碳水化合物,
脂肪=脂肪,
蛋白质=f.Proteins
});
条件是100%正确。如果我将条件
f=>f.barcode==name
直接写入Where函数,但这种方式不行。此代码返回空集。请问,您知道为什么吗?您可能正在使用LINQ to SQL或类似的工具
您应该将变量更改为
表达式
;这将允许查询提供程序分析您的条件。哦,天哪,这里可能会发生很多事情。首先,您应该键入条件作为表达式
。这将使您的查询提供者能够正确地解析它
第二,您正在捕获一个变量(name
),如果您在捕获时间和查询实际执行时间之间修改该变量的值(请注意,在您遍历foods
之前,查询不会执行,那么在您向我们展示的任何代码中都不会执行),您将看到不同于预期的结果。有关此主题的更多信息,请参阅。我不想用更多代码来折磨您的大脑。但是在这种情况下,最好公开更多的代码。我知道延迟求值,所以在执行之前不会修改捕获的变量。谢谢你的帮助。