c# - 是否可以在单次迭代中延迟加载和类型转换对象?

标签 c# linq foreach

我是 C# 编程的新手,有以下场景。

我正在使用一个返回 IEnumerable 的 API,我想根据一些对象属性对其进行迭代:

IEnumerable<objects> listOfObjects = filter.getItems(id);
 List<CustomObject> sortedList = new List<CustomObject>();
            foreach (CustomObject obj in listOfObjects )
            {
                obj.Load(Load.Expanded);
                sortedList.Add(obj);
            }
 foreach (CustomObject custObj in sortedList.OrderByDescending(c => c.RevisionDate))
            {
                // business logic
            }

我需要执行以上所有操作,因为我无法对过滤器查询中返回的对象进行类型转换。此外,未加载从过滤器查询返回的对象,这意味着如果我不执行第一个 foreach 循环,则第二个 foreach 中的 RevisionDate 值将为空。

我想知道是否有更好的方法来处理这种情况,是否可以通过 1 个循环消除这些行数?

最佳答案

您可以像这样在一个 linq 语句中完成:

foreach (var custObj in listOfObjects
                       .Cast<CustomObject>()
                       .Select(obj => {obj.Load(); return obj;})
                       .OrderByDescending(c => c.RevisionDate))

请注意 Select 的这种用法通常不鼓励这样做,这不是一个很好的做法(有一些副作用,比如 obj.Load 中的 Select 就是这样)。

关于c# - 是否可以在单次迭代中延迟加载和类型转换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892632/

相关文章:

iphone - Objective c "for each"(快速枚举)——集合评价?

c# - WPF:如何创建复杂的用户控件? (如 GDI+)

c# - 通过应用程序发布指向粉丝页面的链接

c# - KeyedCollection 是什么的集合?

linq - 使用嵌套对象集合展平 LINQ 集合对象

c# - 如何优化 ASP.NET MVC Controller 以最小化数据库查询次数

c# - 这段代码有多糟糕?

c# - 如何从 System.Linq.Expressions.Expression 中删除括号?

c++ - foreach 在 C++ 中无法识别

php - 在数组 php 中搜索信息时缩短脚本