c# - 更好的数据表

标签 c# linq

我有一个使用 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/

相关文章:

c# - 由 Process Start 启动的进程的进程 ID

c# - 有什么解决方案可以在程序中使用不可猜测的链接吗?

c# - LinQ 查询 where 条件

c# - Lambda 表达式不正确

.net - 引用匿名类型属性

c# - IEnumerable<TSource> Concat<TSource> 是否保留元素的顺序?

c# - 带有 It.IsAny 的 Expression<Func<T, bool>> 总是返回 true

c# - LINQ 中 For 循环的等价物

c# - 如何在 LINQ 查询期间将 XML 属性(字符串)解析为(int)

c# -++ -- 运算符优先级谜题