在c#中循环linq返回列表

本文关键字:返回 列表 linq 循环 | 更新日期: 2023-09-27 18:04:12

我有一个方法如下

public List<viewSearchBook> GetAllBookInfos()
{
    var context = new BookSearchDataClassesDataContext { ObjectTrackingEnabled = false };
    return context.viewSearchBooks.OrderBy(p => p.bookName).ToList();
}

在另一个页面中,我想按如下方式填充一个列表视图:

private void btnSearch_Click(object sender, EventArgs e)
{
    var personnelServer = new BookPersonnelServer();
    _dataSource = personnelServer.GetAllBookInfos();
    lsvBookSearch.View = View.Details;
    lsvBookSearch.Columns.Add("bookName");
    lsvBookSearch.Columns.Add("language");
    DataTable tableBookInfo=(Datatable)_dataSource ;
    for (int i = 0; i < tableBookInfo.Rows.Count;i++ )
    {
        lsvBookSearch.Items.Add(Convert.ToString(tableBookInfo.Rows[i]["bookName"]));
        lsvBookSearch.Items[i].SubItems.Add(Convert.ToString(tableBookInfo.Rows[i]["language"]));
    }
}

_dataSource的定义如下:

private dynamic _dataSource;

如何遍历_dataSource.

DataTable tableBookInfo=(Datatable)_dataSource ;

在c#中循环linq返回列表

你分配给_dataSource的是List<viewSearchBook>;为什么你期望它"神奇地"转换成DataTable ?这些类型之间没有转换……为什么不直接遍历列表呢?

 foreach (viewSearchBook book in _dataSource)
 {
   lsvBookSearch.Items.Add(book.bookName);
   lsvBookSearch.Items[i].SubItems.Add(book.language);
 }

不要将_dataSource声明为dynamic,在这种情况下没有意义。dynamic并不像你想象的那样。