c# - 匿名类型中的临时变量

标签 c# linq

我有一个类似于下面的 linq 语句:

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        ID = row.ID,
                                        X = GetObjectByProcessingID(row.ID)[0],
                                        Y = GetObjectByProcessingID(row.ID)[1],
                                        ....
                                    };

是否可以这样做:

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        private var tmp = GetObjectByProcessingID(row.ID),
                                        ID = row.ID,
                                        X = tmp[0],
                                        Y = tmp[1],
                                        ....
                                    };

避免调用 GetObjectByProcessingID 两次?

我知道你可以这样做:

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        ID = row.ID,
                                        XAndY = GetObjectByProcessingID(row.ID),
                                        ....
                                    };

但在这种情况下,它将暴露整个数组。我也知道我可以在方法端 (GetObjectByProcessingID) 实现诸如缓存之类的东西,或者创建一个辅助方法来调用它并记住最后一个值(如果 ID 相同)。但是有更好的方法吗?我可以在创建匿名类型时创建临时变量吗?

最佳答案

像这样使用 let 关键字:

var entities = from row in table.AsEnumerable()
               let tmp = GetObjectByProcessingID(row.ID)
               select new {
                            ID = row.ID,
                            X = tmp[0],
                            Y = tmp[1],
                            ....
                           };

你也可以尝试使用我非常喜欢的方法语法:

var entities = table.AsEnumerable()
                    .Select(row => {
                       var tmp = GetObjectByProcessingID(row.ID);
                       return new {
                                ID = row.ID,
                                X = tmp[0],
                                Y = tmp[1],
                                ....
                              };
                     });

关于c# - 匿名类型中的临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19521554/

相关文章:

c# - 拆分逗号分隔值 (CSV)

c# - 图像坐标系统设计

c# - 尝试优化 linq 查询

.net - Linq 查询不返回 IEnumerable

c# - 计算数组中的项目,除了等于 -1 的值

c# - 如何在 C# 中清除 errno?

c# - 无法加载我从未添加过的文件或程序集 'Microsoft.SharePoint.Library'

c# - unity中如何通过Line Renderer得到流畅的线条?

linq - nhibernate 2 linq 急切加载

c# - 有没有办法将键/值对列表转换为数据传输对象