c#我可以将一个方法应用于IQueryable以将其转换为列表吗



我正试图返回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语句。(

最新更新