2008-12-17 22 views
2

我有一個應用程序使用數據表來執行數據的分組,過濾和聚合。我想用我自己的數據結構替換數據表,所以我們沒有任何不必要的開銷,我們從使用數據表獲得。所以我的問題是,如果Linq可以用來執行數據的分組,過濾和聚合,並且如果它可以是與數據表類似的性能,或者我應該只是蹲下並編寫自己的算法來做到這一點?一個更好的數據表

感謝

丹河

回答

2

除非您參加簡單的課程(POCO等),否則您自己的實施可能會有與DataTable差不多的開銷。就我個人而言,我會更多地使用像LINQ到SQL,實體框架等工具。然後,您可以使用LINQ到對象來針對本地數據,或者針對複雜數據庫查詢使用特定於提供者的實現,而不必將所有數據發送給客戶。

LINQ到對象可以你提到的所有事情,但它涉及所有的數據在內存中。如果您有不平凡的數據,建議使用數據庫。如果您查看LINQ-to-SQL或實體框架,SQL Server Express Edition將是一個很好的起點。


編輯整理評論:

常規TSQL命令是非常愉快的,但你問的區別...其中最大的是LINQ到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到SQL數據上下文,它可以在數據庫服務器上構建適當的TSQL。這使得可以在代碼中使用單個查詢機制(當然,在LOLA的範圍內)。

+0

使用Linq-to-sql和常規sql有什麼區別? – 2008-12-17 20:01:12

0

爲什麼不使用本地數據庫像sqlserver的CE或嵌入式火鳥? (甚至可以訪問!:))。將數據存儲在本地數據庫中,使用簡單的SQL查詢進行處理並將數據提取回來。更簡單和可能更少的開銷,再加上你不必編寫所有的分組/聚合等邏輯,因爲數據庫系統已經內置,調試和工作的邏輯。

+0

那麼,不能訪問...沒有人值得;-p – 2008-12-17 19:58:16

+0

@Marc:爲什麼不? :) MS Access是一個優秀的基於文件的數據庫,對單用戶應用程序具有良好的性能,並且具有比sqlserver CE更多的功能。對於數據庫,我不明白爲什麼人們應該選擇CE來訪問。 :) – 2008-12-18 08:06:53

1

你最好讓數據庫處理分組,過濾和聚合。數據表實際上在這類事情上相對較好(他們的不良聲譽似乎主要來自不恰當的用法),但不如實際的數據庫。此外,如果沒有您的工作批號,我會把我的錢放在DataTable的性能比您的本地數據結構更好。

0

是的,您可以使用LINQ使用自定義對象執行所有這些操作。

我注意到很多人建議你在數據庫中做這種類型的東西......但是你從來沒有指出數據庫來自哪裏。

如果數據來自數據庫,那麼至少過濾應該可能發生在那裏,除非您正在做一些專門的事情(例如,從一組緩存的數據開始工作)。即便如此,如果您正在處理大量的緩存數據,那麼您可能會很好地將這些數據放入像SQLite這樣的嵌入式數據庫中,就像其他人已經提到的那樣。

相關問題