Я написал метод, который вызывает метод, возвращающий запрос linq. Внутри этого метода мне нужно применить выражение case к запросу linq, который я получаю от метода, который я вызываю. Я подумал, что, возможно, с выражением лямбда можно было бы применить выражение случая, но как я могу это сделать?Case in Lambda Expression
ответ
Ну, вы можете использовать лямбда-выражение оператор тела:
Func<int,string> x = value =>
{
switch(value)
{
case 0: return "hello";
case 1: return "there";
default: return "other";
}
};
Однако, вы не сможете преобразовать его в дерево выражения, так как они поддерживают только лямбда-выражения с одним выражением. Вы пытаетесь использовать LINQ to SQL здесь?
Конечно, вы могли использовать вложенные условными вместо этого, и это должно работать с деревьев выражений:
Expression<Func<int,string>> x = value =>
value == 0 ? "hello"
: value == 1 ? "there"
: "other";
Это рода коммутатора/случае ... хотя не очень эффективен, он может будьте достаточно хороши для вас.
Возможно, вы сможете использовать тернарное заявление.
[boolean expression] ? [result if true] : [result if false]
Я попытался сделать это таким образом, но получил только исключение. var c = q.Where (e => e.Status.Value == 6? E.Status.Value = 0: e.Status.Value); – Hallaghan
@ Hallaghan: «Только получил исключение» не очень подробно. Пожалуйста, предоставьте как можно больше информации в вопросе. Если вы что-то пробовали, но получили исключение, расскажите нам об этом. Точно так же это помогло бы, если бы вы сказали, что используете LINQ to SQL для начала. –
Прошу прощения, у меня плохой день, и я отвлекаюсь. По теме, я получаю исключение System.InvalidOperation при попытке конвертировать из типа bool в int. Интересно, происходит ли это, потому что e.Status является нулевым. – Hallaghan
Можете ли вы использовать обычную старую функцию для выполнения этого вместо лямбда?
X.Select(GetY);
or
X.Select(x => GetY(x));
or
from x in X
select new
{
y = GetY(x)
};
...
private YType GetY(XType x)
{
switch(x)
{
...
}
}
- 1. Count in lambda expression
- 2. Lambda expression in Iterable implementation
- 3. Lambda Expression
- 4. min/max lambda expression in java
- 5. Lambda Expression in C++ std :: copy_if
- 6. if и else in python lambda expression
- 7. Where where with Join in lambda expression
- 8. Lambda expression Group by in C#
- 9. Pivot in LINQ using lambda expression
- 10. Lambda Expression
- 11. Lambda expression - Читать db
- 12. Linq Lambda Expression
- 13. VB.Net Lambda Expression
- 14. Lambda select many expression
- 15. Case Expression Помощь требуется
- 16. LINQ Vs. Lambda Expression
- 17. Java 8 --- Lambda Expression
- 18. Lambda Expression Параметры/декларация
- 19. C# Lambda expression -Help
- 20. Lambda expression Where where
- 21. Lambda expression throws System.MissingMemberException
- 22. Сформировать Lambda Expression
- 23. Lambda Expression без АргументЪ
- 24. Mock Lambda Parameterless Expression
- 25. Slow Lambda Expression
- 26. Как Lambda Expression работает
- 27. C# Lambda Expression Speed
- 28. Lambda Expression Java Conversion
- 29. AddHandler Lambda Expression
- 30. Lambda Expression: == vs. .Equals()
Да, я пытаюсь использовать LINQ для SQL здесь. И одним из требований является скорость. Приложение, над которым я работаю, довольно быстро выполняет почти все свои задачи, и я не могу отказаться от качества, если вы знаете, что я имею в виду. – Hallaghan
@Hallaghan: Ну, это не эффективно в * C# *, но это может привести к соответствующему SQL без каких-либо проблем. Я найду что-то, что работает в первую очередь, и * затем * беспокоиться об эффективности. –