当任何意见DataTable.Select应与使用LINQ选择与内存数据表打交道时?
我发现LINQ的语法更简单,功能更强大,但我不知道是否有性能问题或其他问题,使一个DataTable中选择最好。
(我使用的是第三方API,它提供的是已经从数据库中预先填充的DataTable。我需要的是进一步筛选的内存。)
当任何意见DataTable.Select应与使用LINQ选择与内存数据表打交道时?
我发现LINQ的语法更简单,功能更强大,但我不知道是否有性能问题或其他问题,使一个DataTable中选择最好。
(我使用的是第三方API,它提供的是已经从数据库中预先填充的DataTable。我需要的是进一步筛选的内存。)
基于个人的经验,我尽量避免Datatable.Select。 我发现它是缓慢的,并有一些奇怪的错误。
一(确认并记录微软)的bug我跑进是DataTable.Select并不总是评估和条件正确时,有在声明中括号。
例如,(Col1中> 1)和(西<10)可能无法返回正确的回答,而Col1中> 1和col <10将正常工作。
此错误并不在每台计算机上显示出来。 在我来说,我用的是支票跑在我的开发平台,除了每一个客户端计算机的罚款。 我发现这个错误后,我开始转向使用LINQ的选择,并注意到在操作的速度显著上升。
附注:没有进入冗长的解释,我公司不使用数据库来存储数据。 我们所有的数据表与作业从平板文件加载内存表不涉及。 因此,我不是在谈论LINQ 2 SQL,但LINQ到数据集。
甚至没有提LINQ,我不会用DataTable.Select 任何地方 ,除非我绝对必须的,因为在大多数情况下,这意味着执行在客户端的东西,也许应该在数据库中进行。
更新 :这里我的答案可能有点夸大。 有有时使用一个DataTable作为客户端与数据库之间的往返最小化(希望)小的内存数据库正当理由。
嗯,你比较数据集与LINQ到SQL ? 如果你是,那么我会说只是沟数据集,并与L2S去。 DataTable.Select
假定您已经填充了数据的数据表。 这会导致在这里装载比你需要的,只是在客户端过滤更多的数据糟糕的设计。 获取SQL服务器做你查询你,它给你的结果集的工作。 L2S将只有当你遍历集合数据库中读取的,所以它进入数据库之前更容易制定查询。
LINQ to SQL中引入了一些调试开销,因为它可劲儿让动态生成的SQL出它(而在数据集你提供在首位的SQL),但在几乎所有其他情况下,它更优雅。 该延迟加载功能是非常有用的。
如果你不使用数据库,那么我还是喜欢LINQ(特别是被称为LINQ到对象在这种情况下)在数据集。 语法是要简单的多,而且因为没有魔术字符串(即SQL语句),那么它更容易测试,你会得到编译时错别字等警告