我有一个使用 DataTables 来执行数据分组、过滤和聚合的应用程序。我想用我自己的数据结构替换数据表,这样我们就不会因为使用数据表而产生任何不必要的开销。所以我的问题是 Linq 是否可以用于对我的数据执行分组、过滤和聚合,如果可以,其性能是否可以与数据表相媲美,或者我应该埋头编写自己的算法来完成它?
谢谢
丹·R.
最佳答案
除非您选择简单的类(POCO 等),否则您自己的实现可能会产生几乎与 DataTable
一样多的开销。 。就我个人而言,我更倾向于使用 LINQ-to-SQL、Entity Framework 等工具。然后,您可以针对本地数据使用 LINQ-to-Objects,或者针对复杂数据库查询使用特定于提供程序的实现,而无需提取所有数据发送给客户端。
LINQ-to-Objects 可以做您提到的所有事情,但它涉及将所有数据存储在内存中。如果您有重要数据,建议使用数据库。如果您了解 LINQ-to-SQL 或 Entity Framework ,SQL Server Express Edition 将是一个很好的起点。
编辑评论:
常规 TSQL 命令很好,但您会问其中的区别...最大的区别是 LINQ-to-SQL 将为您提供整个 DAL,这可以节省大量时间,并使其成为可能以获得更多的编译时安全性。但它也允许您使用相同的方法来查看本地对象和数据库 - 例如,以下是有效的 C# 3.0([someDataSource] 除外,见下文):
var qry = from row in [someDataSource]
group row by row.Category into grp
select new {Category = grp.Key, Count = grp.Count(),
TotalValue = grp.Sum(x=>x.Value) };
foreach(var x in qry) {
Console.WriteLine("{0}, {1}, {2}", x.Category, x.Count, x.TotalValue);
}
如果[someDataSource]是本地数据,例如List<T>
,这将在本地执行;但如果这是来自 LINQ-to-SQL 数据上下文,它可以在数据库服务器上构建适当的 TSQL。这使得在代码中使用单一查询机制成为可能(当然,在 LOLA 的范围内)。
关于c# - 更好的数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375765/