我正在将一个分组的Type1列表转换为另一个Type2列表,并且想知道如何在从分组项中选择new的同时,将Type2对象的属性定义为其他和刚刚定义的Type2属性的串联。

我的代码如下:

List<Type1> list1 = GetList1();

List<Type2> list2 = (from r in list1
                    group r by new
                    {
                         r.Prop1,
                         r.Prop2,
                         r.Prop3
                    }
                    into groupedRequest
                     select new Type2()
                     {
                         Prop1 = groupedRequest.Key.Prop1,
                         Prop2 = GetProp2FromComplexOperation(groupedRequest.Key.Prop1),
                         Prop3 = Prop1 + Prop2 //<---- The name Prop1 does not exists in the current context
                     }).ToList<Type2>();


我无法在创建的Type2()中访问Prop1和Prop2。
有可能以任何方式做到这一点吗?

我知道可以计算

Prop3 = groupedRequest.Key.Prop1 + GetProp2FromComplexOperation(groupedRequest.Key.Prop1);


但我想避免再次调用GetProp2FromComplexOperation。

提前致谢!

最佳答案

您可以这样使用let

List<Type2> list2 = (from r in list1
                    group r by new
                    {
                         r.Prop1,
                         r.Prop2,
                         r.Prop3
                    }
                    into groupedRequest
                    let p1 = groupedRequest.Key.Prop1
                    let p2 = GetProp2FromComplexOperation(groupedRequest.Key.Prop1)
                     select new Type2()
                     {
                         Prop1 = p1,
                         Prop2 = p2,
                         Prop3 = p1 + p2
                     }).ToList<Type2>();

关于c# - C#linq分组依据-访问其他属性,选择新的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28149666/

10-12 22:22