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
也有类似的功能,但它提供了更多的功能(如更多),并且适用于需要这些功能的地方,如使用高级功能(绑定、自定义排序、分组、行更改事件、添加单元格等)表示表格数据。所有这些额外的功能都需要额外的开销(更多的内存需求)
这是获取详细信息的有效方法还是我可以改进此方法
您可以使用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到实体的方法