使用 Func 查询

本文关键字:查询 Func 使用 | 更新日期: 2023-09-27 18:36:23

我有以下代码段,但 x.PropertyThree 的值为零,尽管我无法弄清楚这段代码是如何工作的来追溯属性被映射的位置。 你能帮忙解释一下这里发生了什么吗? x.PropertyThree 中的 x 从何而来?谢谢

我正在努力的代码

        var data = DoSomething(
            model,
            options,
            x => x.KeyDisplayValue,
            (x, s) => new List<object>
                                    {
                                        Magic(x.PropertyOne, s),
                                        Magic(x.PropertyTwo, s),
                                        Magic(x.PropertyThree, s),
                                        x.PropertyFour,
                                        x.PropertyFive,
                                        x.NoOperationRate,
                                     });

方法

protected List<List<object>> DoSomething(
        MyModel model,
        MyOptions options,
        Func<TSomething,string> theValue,
        Func<TSomething, bool, List<object>> aMethod)

使用 Func 查询

(x, s) => new List<object>
                                    {
                                        Magic(x.PropertyOne, s),
                                        Magic(x.PropertyTwo, s),
                                        Magic(x.PropertyThree, s),
                                        x.PropertyFour,
                                        x.PropertyFive,
                                        x.NoOperationRate,
                                     }

是一个 lambda 表达式,它可以翻译成方法:

public List<object> unnamed(TSomething x, bool s) {
   return new List<object>
                                        {
                                            Magic(x.PropertyOne, s),
                                            Magic(x.PropertyTwo, s),
                                            Magic(x.PropertyThree, s),
                                            x.PropertyFour,
                                            x.PropertyFive,
                                            x.NoOperationRate,
                                         };
}

new List<object> { ... }只是以下方面的快捷方式:

var list = new List<object>();
list.Add(Magic(x.PropertyOne, s));
list.Add(Magic(x.PropertyTwo, s));
...
list.Add(x.NoOperationRate);

方法DoSomething里面必须是一个代码:

aMethod(something, someBool);

换句话说,您应该查看函数内部DoSomething找出传递给此长 lambda 的参数。