Linq - Как хранить "где условие" в переменной - PullRequest
1 голос
/ 27 января 2011

можно хранить условие Where в этом операторе linq в переменной?

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, то это сработает, но это не так. Этот код возвращает пустой набор. Пожалуйста, знаете почему?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Вы, вероятно, используете LINQ to SQL или что-то подобное.

Вы должны изменить свою переменную на Expression<Func<NutritionValues, bool>>;это позволит поставщику запросов проанализировать ваше состояние.

0 голосов
/ 27 января 2011

О боже, здесь может быть много чего. Во-первых, вы должны набрать condition как Expression<Func<NutritionValues, bool>>. Это позволит вашему провайдеру запросов разобрать его правильно.

Во-вторых, вы захватываете переменную (name), и если вы изменяете значение этой переменной между временем захвата и временем фактического выполнения запроса (обратите внимание, что запрос не выполняется, пока вы не выполните итерацию свыше foods, он не был выполнен ни в одном из кода, который вы нам показали), вы увидите результаты, отличные от ожидаемых. Подробнее об этом см. Закрытие переменной цикла, считающейся вредной .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...