我需要对“CalculatedField”执行一些复杂的计算,但收到错误“无法将 lambda 表达式分配给匿名类型属性”。我怎样才能以优雅的方式解决这个计算?
var query =
from person in people
join pet in pets on person equals pet.Owner
select new
{
OwnerName = person.FirstName,
PetName = pet.Name,
CalculatedField = () => { return "blah-blah")
};
可以在赋值前确定计算结果,避免将 lamda 表达式设置为匿名类型
var query =
from person in people
join pet in pets on person equals pet.Owner
let calculatedResult = ComplexCalculation()
select new
{
OwnerName = person.FirstName,
PetName = pet.Name,
CalculatedField = calculatedResult
};
private string ComplexCalculation()
{
return "blah-blah";
}
使用您的语法,它认为您正在尝试将 Lambada 分配给 CalcualtedField 变量。您不能随心所欲地启动 Lambada。编译器没有上下文了解您尝试分配给匿名类变量的值类型,因此它假设您尝试分配 lambda。
根据您提供给我们的信息,我建议将其分解为一个单独的方法。例如:
var query =
from person in people
join pet in pets on person equals pet.Owner
select new
{
OwnerName = person.FirstName,
PetName = pet.Name,
CalculatedField = DoCalculation()
};
然后你有另一个方法“DoCalculation”,它接受它需要的参数并执行计算并返回你的值。
public string DoCalculation()
{
return "blah-blah";
}