我是 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/