如何在存储库模式中将匿名列表转换为类型列表

本文关键字:列表 转换 类型 存储 模式 | 更新日期: 2023-09-27 18:27:28

我使用存储库模式与数据交互,并拥有一个图书列表,该列表希望获得带有一些字段的图书。我在数据层提供了一个IEnumerable方法,返回所需字段的列表:

public IEnumerable BookList()
{
   var res=base.GetAll().Select(x => new { ID=x.ID, Name=x.Name }).ToList();
   return res;
}

在表示层中,我尝试将类型更改为BookViewModel,如下所示:

var res = _teacherUow.Books.BookList().OfType<ViewModel.BookViewModel >().ToList();

但是res是空的,当我尝试投射它时

var res = _teacherUow.Books.BookList().Cast<ViewModel.BookViewModel >();

我收到这个例外:

Unable to cast object of type <>f__AnonymousType0`2[System.Int32,System.String]
    to type ViewModel.BookViewModel
var res = _teacherUow.Books.BookList();

传递到字典中的模型项属于类型

System.Collections.Generic.List`1[<>f__AnonymousType0`2[System.Int32,System.String]]

但是这本字典需要类型的模型项

System.Collections.Generic.IEnumerable`1[ViewModel.BookViewModel]

如何在存储库模式中将匿名列表转换为类型列表

在您的表示层中,将您的函数更改为:

 public IEnumerable<ViewModel.BookViewModel> BookList() 
{ 
    List<ViewModel.BookViewModel> res=base.GetAll().Select(x => new ViewModel.BookViewModel { 
                                ID=x.ID, 
                                Name=x.Name 
                              }).ToList(); 
return res; 
}