在选择字段中使用表达式的 linq

问题描述 投票:0回答:2

我需要对“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") 
    };
c# linq
2个回答
0
投票

可以在赋值前确定计算结果,避免将 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";
}

0
投票

使用您的语法,它认为您正在尝试将 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";
}
© www.soinside.com 2019 - 2024. All rights reserved.