C# 数据表还是IList?哪个更好?

C# 数据表还是IList?哪个更好?,c#,asp.net,linq,list,linq-to-entities,C#,Asp.net,Linq,List,Linq To Entities,我有以下服务方法- public static DataTable GetBookDetails(BookEntities context) { DataTable dtBooks= new DataTable(); dtBooks.TableName = "BookDetails"; dtBooks.Columns.Add(new DataColumn("Name",typeof(string))); dtBooks.Co

我有以下服务方法-

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;
    }
公共静态数据表GetBookDetails(BookEntities上下文)
{
DataTable dtBooks=新DataTable();
dtBooks.TableName=“BookDetails”;
Add(新数据列(“名称”,typeof(字符串));
Add(新数据列(“ISBN”,typeof(string));
添加(新的数据列(“Price”,typeof(int));
添加(新的数据列(“作者”,typeof(字符串));
IQueryable query=来自context.Books.Include(“作者”)中的b
.包括(“详细信息/价格”)
.包括(“活动”)
其中b.Activity.i是活动的
选择b;
if(查询!=null)
{
var sorted=query.ToArray().OrderByDescending(b=>b.Activity.DateCreated);
foreach(已分类的bb册)
{
DataRow row=dtBooks.NewRow();
行[“名称”]=bb.Name;
行[“ISBN”]=bb.ISBN;
行[“价格”]=bb.Details.Price.CostOfBook;
行[“Author”]=bb.Authors.Name;
dtBooks.Rows.Add(row);
}
}
其他的
dtBooks=null;
还书;
}
我的问题是-

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

    IList
    表示可以通过索引访问的集合。没别的了

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

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

    您可以使用
    IList
    稍微改进。改进不在于更快地访问数据,而在于不使用
    DataTable
    提供的额外功能。如果您不要求按索引访问,可以使用进一步改进。
    您可以通过使用泛型版本进一步改进<代码>IList,或
    IEnumerable
    在装箱/拆箱开销时保存

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

    除了按索引访问之外,IList没有由
    DataTable
    提供的过多功能的开销

    使用DataTable有什么问题


    没问题
    DataTable
    更适合于需要高级数据访问功能的地方。

    如果您想为数据库或数据库表建模,那么我建议您选择DataTable,这是一个类IList是一个接口,不具备数据表的功能

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

    您可以使用扩展方法代替直接调用静态方法。我觉得它看起来更干净

    变量
    query
    不能为空

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

    IList
    (或
    IEnumerable
    )不同,使用IList代替DataTable没有什么大的优势
    T
    是另一个具有域对象
    Book
    含义的类

    使用
    IList
    提供了对类型T的硬控制,并分别减少了错误,但设计起来更加困难

    使用DataTable有什么问题


    您应该了解,方法的调用方对
    数据表中
    行的具体结构一无所知。通常,如果您从IList的角度来看,我们在使用服务时会尽量保持通用性。但是,datatable提供了@Tilak提到的更多功能。

    您没有可以使用的相关
    书籍
    类吗?请查看@RTRokzzz如何使用Inculde()。如果它是一个扩展方法,您可以共享它的代码吗?@faheemkhan:include()是一个Linq到实体的方法