DataTable还是IList?哪个更好?

RTR*_*zzz 1 c# linq asp.net linq-to-entities list

我有以下服务方法 -

public static DataTable GetBookDetails(BookEntities context)
    {
        DataTable dtBooks= new DataTable();
        dtBooks.TableName = "BookDetails";
        dtBooks.Columns.Add(new DataColumn("Name",typeof(string)));
        dtBooks.Columns.Add(new DataColumn("ISBN",typeof(string)));
        dtBooks.Columns.Add(new DataColumn("Price",typeof(int)));
        dtBooks.Columns.Add(new DataColumn("Author",typeof(string)));
        IQueryable<Book> query = from b in context.Books.Include("Authors")
                                                                      .Include("Details/Price")
                                                                      .Include("Activity")
                                     where b.Activity.IsActive
                                     select b;
        if (query != null)
        {
            var sorted = query.ToArray().OrderByDescending(b => b.Activity.DateCreated);
            foreach (Book bb in sorted)
            {
                DataRow row = dtBooks.NewRow();
                row["Name"] = bb.Name;
                row["ISBN"] = bb.ISBN;
                row["Price"] = bb.Details.Price.CostOfBook;
                row["Author"] = bb.Authors.Name;
                dtBooks.Rows.Add(row);
            }
        }
        else
            dtBooks= null;
        return dtBooks;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是 -

  1. 这是获取详细信息的有效方式还是我可以改进此方法?
  2. 有人建议我使用IList而不是DataTable.我应该用这个吗?如果是这样,有什么好处?
  3. 使用DataTable有什么问题?

Til*_*lak 7

DataTable vs IList

IList表示可以通过索引访问的集合.而已.

DataTable也具有类似的功能,但它提供了更多功能(如更多事件,更多功能),适用于需要这些功能的地方,例如使用高级功能表示表格数据(绑定,自定义排序,分组,行更改事件,单元格添加等) ).所有这些额外功能都需要额外的开销(需要更多内存).

这是获取详细信息的有效方法还是我可以改进此方法?

你可以通过使用稍微改善IList.改进不是在更快的数据访问中,而是在不使用DataTable提供的额外功能.如果您不需要索引访问,您可以通过使用进一步改进IEnumerable.
您可以使用泛型版本进一步改进.IList<T>,或IEnumerable<T>保存拳击/拆箱开销.

有人建议我使用IList而不是DataTable.我应该用这个吗?如果是这样,有什么好处?

IList没有DataTable索引访问以外提供的大量功能的开销.

使用DataTable有什么不对?

没有错.DataTable更适合需要高级数据访问功能的地方.