我正试图返回Obj1
类型的列表,但我首先需要使用IQueryable LINQ语句来提取这些类型,该语句为我提供了Obj2
类型的列表。并且有一个方法可以使用foreach
循环将它们转换为所需的类型
public List<Obj1> GetObj1List(int id)
{
List<Obj2> obj2List = Select(x => x.ObjTable.Where(a => a.Id == id)).ToList();
List<Obj1> obj1List = new List<Obj1>();
foreach(Obj2 o in obj2List)
{
obj1List.Add(MapObject2ToObject1(o, OtherMethod));
}
return obj1List;
}
有没有什么方法可以包装我的Select
语句,将MapObject2ToObject1
方法应用于结果而不使用foreach
行?
应该很容易。
public List<Obj1> GetObj1List(int id)
{
var obj1List = Select(x => x.ObjTable.Where(a => a.Id == id))
.Select(o => MapObject2ToObject1(o, OtherMethod))
.ToList();
return obj1List;
}
已更新MapObject2ToObject1
的方法签名
您希望AsEnumerable
有效地将LINQ用于对象的最后一个映射部分:
public List<Obj1> GetObj1List(int id) =>
Select(x => x.ObjTable.Where(a => a.Id == id)
.AsEnumerable()
.Select(MapObject2ToObject1)
.ToList();
(我假设Select
是当前类中的一个方法,根据您的示例返回IQueryable<Object2>
。我还假设您使用的是C#或更高版本,所以您可以使用这样的表达式体方法。如果不是,请将其全部放在大括号中,并添加一个return语句。(