Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq-如何存储;where条件“;可变的_Linq_Linq To Entities - Fatal编程技术网

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).

是否可以将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
                                    });
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
之前,查询不会执行,那么在您向我们展示的任何代码中都不会执行),您将看到不同于预期的结果。有关此主题的更多信息,请参阅。

我不想用更多代码来折磨您的大脑。但是在这种情况下,最好公开更多的代码。我知道延迟求值,所以在执行之前不会修改捕获的变量。谢谢你的帮助。