Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataTables vs IEnumerable_C#_List_Datatable_Ienumerable - Fatal编程技术网

C# DataTables vs IEnumerable

C# DataTables vs IEnumerable,c#,list,datatable,ienumerable,C#,List,Datatable,Ienumerable,我正在和另一个和我一起工作的程序员辩论 对于数据库返回类型,是否存在任何显著的内存使用或性能差异,或其他应避免使用数据集和数据表的缺点,以及支持实现IEnumerable的类型。。。反之亦然 我更喜欢返回实现了Enumerable List、T[]等的类型,因为它更轻量级,在访问属性时对对象具有强类型,允许关于底层类型等更丰富的信息。但是,手动使用数据读取器时,它们确实需要更多的时间来设置 现在使用数据表的唯一原因就是懒散吗?无论是在内存需求方面,还是在创建/填充数据表所花费的处理器时间方面,数

我正在和另一个和我一起工作的程序员辩论

对于数据库返回类型,是否存在任何显著的内存使用或性能差异,或其他应避免使用数据集和数据表的缺点,以及支持实现IEnumerable的类型。。。反之亦然

我更喜欢返回实现了Enumerable List、T[]等的类型,因为它更轻量级,在访问属性时对对象具有强类型,允许关于底层类型等更丰富的信息。但是,手动使用数据读取器时,它们确实需要更多的时间来设置


现在使用数据表的唯一原因就是懒散吗?

无论是在内存需求方面,还是在创建/填充数据表所花费的处理器时间方面,数据表肯定比列表要重得多。 使用DataReader虽然比使用DataTables更详细,但速度要快得多。我假设您使用DataAdapter来填充它们

也就是说。。。 除非这是在某个真正重要的地方,否则无论哪种方法,你都可能很好,而且两种方法都足够快,所以在每种情况下都可以选择更合适的方法。有时你想用小代码填充它们,有时你想用小代码读取它们


我自己倾向于仅在绑定到GridView时使用DataTables,或者当我需要同时激活多个resultset时使用DataTables。

直接使用DataTables意味着将自己绑定到底层数据源及其布局方式。从可维护性的角度来看,这是不好的。如果您的视图需要的只是一些对象的列表,那么您就应该提供它。

使用System.Collections类的另一个优点是您可以获得更好的排序和搜索选项。我不知道有什么合理的方法可以改变数据表排序或搜索的方式;使用集合类,您只需让类实现IComparable或IEquatable,就可以完全自定义List.Sort和List.Contains的工作方式

此外,对于列表,您不必担心DBNull,因为我不止一次地被它绊倒,因为我期望null并得到了DBNull。

我还喜欢IEnumerable,它可以通过方法和属性增强集合的底层类型,从而使实现更加优雅,而且代码更易于维护。例如,FullName属性。如果类不受您的控制,您还可以向该类添加扩展方法

public class SomeUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } }
}

我发现通过sql使用大型表时,数据表比IEnumerable快得多。我在一个HTML页面中转储了一个包含26k行和25列的表。Datatable只需3秒,IEnumerable只需9秒。我投票给DataTable。除了类型之外,所有代码都相同。

平台/语言?我猜DataTable是一个特定于平台的结构;但是,使其显式化会使回答更容易确定,平台是.Net Framework c或vb 2.0+我想我从2009年起就没有使用过DataTable,它们是否可以填充t[]通过使用ado.net执行select*from table???@Learning Overthinker是的,但您需要调用SqlCommand.ExecuteReader并使用IDataReader读取记录使用数据视图进行排序和搜索。