您能否指导我如何在Razor视图引擎中设置断点来测试我的lambda表达式?
例如,我有以下代码:
@(Html.DropDownList("Condition4",
new SelectList(Model
.Conditions
.Where(c =>
c.TxCondition.TxConditionTypeId == Model.ConditionTypes.Single
ct => ct.TxConditionType.ConditionTypeCode == "Region")
.TxConditionType
.TxConditionTypeId),
"TxCondition.TxConditionId",
"ConditionTitle",
Model.SearchCondition.Condition4),
"All"))
在断点上,我尝试使用“快速监视Windows”测试以下代码,但错误是“表达式不能包含lambda表达式”
您能否指导我如何在MVC Razor视图中测试Lambda表达式?
非常感谢您的时间和帮助.
Model.Conditions.Where(c => c.TxCondition.TxConditionTypeId == 1)
解决方法:
调试和Lambda总是很难处理.
一个用户问了一个问题:Visual Studio debugging “quick watch” tool and lambda expressions,并解释说匿名函数实际上非常复杂,需要在编译器方面进行大量工作.因此,您不能真正将它们放入快速手表或类似产品中.
我无法真正解决您的问题,但我想提出一种稍微不同的方法.
在MVC中,视图应该是愚蠢的.他们真的应该是“做事”.我的意思是,他们不应该真正关心创建变量,执行逻辑,选择或实例化对象等等.相反,应该只接受赋予它的对象并尝试显示它们.
这迫使您将所有这些内容放在代码库中的其他位置.正确使用良好的体系结构,分层和关注点分离将有助于您组织事物,包括业务逻辑.此外,我建议,当使用Lambda编写逻辑并且如果Lambda有点复杂时,请将组件分成多个部分,以便于调试和逐步调试.
ICollection<object> filter1 = someCollection.Where(x => x.IsAvailable);
object myObject = filter1.SingleOrDefault(x => x.SomeString = "aValue").Distinct();